Merge

Thu, 21 Nov 2013 12:30:35 -0800

author
kvn
date
Thu, 21 Nov 2013 12:30:35 -0800
changeset 6485
da862781b584
parent 6484
318d0622a6d7
parent 6111
55be5aac78e2
child 6486
b0133e4187d3

Merge

src/cpu/sparc/vm/sharedRuntime_sparc.cpp file | annotate | diff | comparison | revisions
src/cpu/sparc/vm/sparc.ad file | annotate | diff | comparison | revisions
src/share/vm/c1/c1_globals.hpp file | annotate | diff | comparison | revisions
src/share/vm/code/nmethod.cpp file | annotate | diff | comparison | revisions
src/share/vm/compiler/compileBroker.cpp file | annotate | diff | comparison | revisions
src/share/vm/memory/universe.cpp file | annotate | diff | comparison | revisions
src/share/vm/oops/methodData.cpp file | annotate | diff | comparison | revisions
src/share/vm/oops/methodData.hpp file | annotate | diff | comparison | revisions
src/share/vm/opto/compile.cpp file | annotate | diff | comparison | revisions
src/share/vm/opto/loopTransform.cpp file | annotate | diff | comparison | revisions
src/share/vm/opto/matcher.cpp file | annotate | diff | comparison | revisions
src/share/vm/opto/memnode.hpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/arguments.cpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/globals.hpp file | annotate | diff | comparison | revisions
src/share/vm/utilities/globalDefinitions.hpp file | annotate | diff | comparison | revisions
     1.1 --- a/.hgtags	Wed Nov 20 11:08:09 2013 -0800
     1.2 +++ b/.hgtags	Thu Nov 21 12:30:35 2013 -0800
     1.3 @@ -391,3 +391,8 @@
     1.4  82a9cdbf683e374a76f2009352de53e16bed5a91 hs25-b56
     1.5  7fd913010dbbf75260688fd2fa8964763fa49a09 jdk8-b114
     1.6  3b32d287da89a47a45d16f6d9ba5bd3cd9bf4b3e hs25-b57
     1.7 +9ebaac78a8a0061fb9597e07f806498cb626cdeb jdk8-b115
     1.8 +e510dfdec6dd701410f3398ed86ebcdff0cca63a hs25-b58
     1.9 +52b076e6ffae247c1c7d8b7aba995195be2b6fc2 jdk8-b116
    1.10 +c78d517c7ea47501b456e707afd4b78e7b5b202e hs25-b59
    1.11 +f573d00213b7170c2ff856f9cd83cd148437f5b9 jdk8-b117
     2.1 --- a/make/hotspot_version	Wed Nov 20 11:08:09 2013 -0800
     2.2 +++ b/make/hotspot_version	Thu Nov 21 12:30:35 2013 -0800
     2.3 @@ -35,7 +35,7 @@
     2.4  
     2.5  HS_MAJOR_VER=25
     2.6  HS_MINOR_VER=0
     2.7 -HS_BUILD_NUMBER=57
     2.8 +HS_BUILD_NUMBER=59
     2.9  
    2.10  JDK_MAJOR_VER=1
    2.11  JDK_MINOR_VER=8
     3.1 --- a/src/cpu/sparc/vm/macroAssembler_sparc.cpp	Wed Nov 20 11:08:09 2013 -0800
     3.2 +++ b/src/cpu/sparc/vm/macroAssembler_sparc.cpp	Thu Nov 21 12:30:35 2013 -0800
     3.3 @@ -3526,8 +3526,12 @@
     3.4    delayed()->sub(Rtsp, Roffset, Rtsp);
     3.5  
     3.6    // Bang down shadow pages too.
     3.7 -  // The -1 because we already subtracted 1 page.
     3.8 -  for (int i = 0; i< StackShadowPages-1; i++) {
     3.9 +  // At this point, (tmp-0) is the last address touched, so don't
    3.10 +  // touch it again.  (It was touched as (tmp-pagesize) but then tmp
    3.11 +  // was post-decremented.)  Skip this address by starting at i=1, and
    3.12 +  // touch a few more pages below.  N.B.  It is important to touch all
    3.13 +  // the way down to and including i=StackShadowPages.
    3.14 +  for (int i = 1; i <= StackShadowPages; i++) {
    3.15      set((-i*offset)+STACK_BIAS, Rscratch);
    3.16      st(G0, Rtsp, Rscratch);
    3.17    }
     4.1 --- a/src/cpu/sparc/vm/sharedRuntime_sparc.cpp	Wed Nov 20 11:08:09 2013 -0800
     4.2 +++ b/src/cpu/sparc/vm/sharedRuntime_sparc.cpp	Thu Nov 21 12:30:35 2013 -0800
     4.3 @@ -1002,18 +1002,6 @@
     4.4    // and the vm will find there should this case occur.
     4.5    Address callee_target_addr(G2_thread, JavaThread::callee_target_offset());
     4.6    __ st_ptr(G5_method, callee_target_addr);
     4.7 -
     4.8 -  if (StressNonEntrant) {
     4.9 -    // Open a big window for deopt failure
    4.10 -    __ save_frame(0);
    4.11 -    __ mov(G0, L0);
    4.12 -    Label loop;
    4.13 -    __ bind(loop);
    4.14 -    __ sub(L0, 1, L0);
    4.15 -    __ br_null_short(L0, Assembler::pt, loop);
    4.16 -    __ restore();
    4.17 -  }
    4.18 -
    4.19    __ jmpl(G3, 0, G0);
    4.20    __ delayed()->nop();
    4.21  }
     5.1 --- a/src/cpu/sparc/vm/sparc.ad	Wed Nov 20 11:08:09 2013 -0800
     5.2 +++ b/src/cpu/sparc/vm/sparc.ad	Thu Nov 21 12:30:35 2013 -0800
     5.3 @@ -2924,6 +2924,9 @@
     5.4        __ bind(LSkip2);
     5.5      }
     5.6  
     5.7 +    // We have no guarantee that on 64 bit the higher half of limit_reg is 0
     5.8 +    __ signx(limit_reg);
     5.9 +
    5.10      __ subcc(limit_reg, 1 * sizeof(jchar), chr1_reg);
    5.11      __ br(Assembler::equal, true, Assembler::pn, Ldone);
    5.12      __ delayed()->mov(O7, result_reg);  // result is difference in lengths
    5.13 @@ -2981,6 +2984,9 @@
    5.14      Register  chr1_reg = result_reg;
    5.15      Register  chr2_reg =   tmp1_reg;
    5.16  
    5.17 +    // We have no guarantee that on 64 bit the higher half of limit_reg is 0
    5.18 +    __ signx(limit_reg);
    5.19 +
    5.20      //check for alignment and position the pointers to the ends
    5.21      __ or3(str1_reg, str2_reg, chr1_reg);
    5.22      __ andcc(chr1_reg, 0x3, chr1_reg);
     6.1 --- a/src/cpu/x86/vm/interp_masm_x86_32.cpp	Wed Nov 20 11:08:09 2013 -0800
     6.2 +++ b/src/cpu/x86/vm/interp_masm_x86_32.cpp	Thu Nov 21 12:30:35 2013 -0800
     6.3 @@ -196,7 +196,7 @@
     6.4  
     6.5  void InterpreterMacroAssembler::get_unsigned_2_byte_index_at_bcp(Register reg, int bcp_offset) {
     6.6    assert(bcp_offset >= 0, "bcp is still pointing to start of bytecode");
     6.7 -  movl(reg, Address(rsi, bcp_offset));
     6.8 +  load_unsigned_short(reg, Address(rsi, bcp_offset));
     6.9    bswapl(reg);
    6.10    shrl(reg, 16);
    6.11  }
     7.1 --- a/src/cpu/x86/vm/interp_masm_x86_64.cpp	Wed Nov 20 11:08:09 2013 -0800
     7.2 +++ b/src/cpu/x86/vm/interp_masm_x86_64.cpp	Thu Nov 21 12:30:35 2013 -0800
     7.3 @@ -192,7 +192,7 @@
     7.4    Register reg,
     7.5    int bcp_offset) {
     7.6    assert(bcp_offset >= 0, "bcp is still pointing to start of bytecode");
     7.7 -  movl(reg, Address(r13, bcp_offset));
     7.8 +  load_unsigned_short(reg, Address(r13, bcp_offset));
     7.9    bswapl(reg);
    7.10    shrl(reg, 16);
    7.11  }
     8.1 --- a/src/cpu/x86/vm/macroAssembler_x86.cpp	Wed Nov 20 11:08:09 2013 -0800
     8.2 +++ b/src/cpu/x86/vm/macroAssembler_x86.cpp	Thu Nov 21 12:30:35 2013 -0800
     8.3 @@ -1381,8 +1381,12 @@
     8.4    jcc(Assembler::greater, loop);
     8.5  
     8.6    // Bang down shadow pages too.
     8.7 -  // The -1 because we already subtracted 1 page.
     8.8 -  for (int i = 0; i< StackShadowPages-1; i++) {
     8.9 +  // At this point, (tmp-0) is the last address touched, so don't
    8.10 +  // touch it again.  (It was touched as (tmp-pagesize) but then tmp
    8.11 +  // was post-decremented.)  Skip this address by starting at i=1, and
    8.12 +  // touch a few more pages below.  N.B.  It is important to touch all
    8.13 +  // the way down to and including i=StackShadowPages.
    8.14 +  for (int i = 1; i <= StackShadowPages; i++) {
    8.15      // this could be any sized move but this is can be a debugging crumb
    8.16      // so the bigger the better.
    8.17      movptr(Address(tmp, (-i*os::vm_page_size())), size );
     9.1 --- a/src/cpu/x86/vm/templateTable_x86_32.cpp	Wed Nov 20 11:08:09 2013 -0800
     9.2 +++ b/src/cpu/x86/vm/templateTable_x86_32.cpp	Thu Nov 21 12:30:35 2013 -0800
     9.3 @@ -558,7 +558,7 @@
     9.4  
     9.5  
     9.6  void TemplateTable::locals_index_wide(Register reg) {
     9.7 -  __ movl(reg, at_bcp(2));
     9.8 +  __ load_unsigned_short(reg, at_bcp(2));
     9.9    __ bswapl(reg);
    9.10    __ shrl(reg, 16);
    9.11    __ negptr(reg);
    9.12 @@ -1552,7 +1552,11 @@
    9.13                                InvocationCounter::counter_offset();
    9.14  
    9.15    // Load up EDX with the branch displacement
    9.16 -  __ movl(rdx, at_bcp(1));
    9.17 +  if (is_wide) {
    9.18 +    __ movl(rdx, at_bcp(1));
    9.19 +  } else {
    9.20 +    __ load_signed_short(rdx, at_bcp(1));
    9.21 +  }
    9.22    __ bswapl(rdx);
    9.23    if (!is_wide) __ sarl(rdx, 16);
    9.24    LP64_ONLY(__ movslq(rdx, rdx));
    10.1 --- a/src/cpu/x86/vm/templateTable_x86_64.cpp	Wed Nov 20 11:08:09 2013 -0800
    10.2 +++ b/src/cpu/x86/vm/templateTable_x86_64.cpp	Thu Nov 21 12:30:35 2013 -0800
    10.3 @@ -568,7 +568,7 @@
    10.4  }
    10.5  
    10.6  void TemplateTable::locals_index_wide(Register reg) {
    10.7 -  __ movl(reg, at_bcp(2));
    10.8 +  __ load_unsigned_short(reg, at_bcp(2));
    10.9    __ bswapl(reg);
   10.10    __ shrl(reg, 16);
   10.11    __ negptr(reg);
   10.12 @@ -1575,7 +1575,11 @@
   10.13                                InvocationCounter::counter_offset();
   10.14  
   10.15    // Load up edx with the branch displacement
   10.16 -  __ movl(rdx, at_bcp(1));
   10.17 +  if (is_wide) {
   10.18 +    __ movl(rdx, at_bcp(1));
   10.19 +  } else {
   10.20 +    __ load_signed_short(rdx, at_bcp(1));
   10.21 +  }
   10.22    __ bswapl(rdx);
   10.23  
   10.24    if (!is_wide) {
    11.1 --- a/src/share/vm/asm/assembler.cpp	Wed Nov 20 11:08:09 2013 -0800
    11.2 +++ b/src/share/vm/asm/assembler.cpp	Thu Nov 21 12:30:35 2013 -0800
    11.3 @@ -122,7 +122,7 @@
    11.4  void AbstractAssembler::generate_stack_overflow_check( int frame_size_in_bytes) {
    11.5    if (UseStackBanging) {
    11.6      // Each code entry causes one stack bang n pages down the stack where n
    11.7 -    // is configurable by StackBangPages.  The setting depends on the maximum
    11.8 +    // is configurable by StackShadowPages.  The setting depends on the maximum
    11.9      // depth of VM call stack or native before going back into java code,
   11.10      // since only java code can raise a stack overflow exception using the
   11.11      // stack banging mechanism.  The VM and native code does not detect stack
    12.1 --- a/src/share/vm/c1/c1_GraphBuilder.cpp	Wed Nov 20 11:08:09 2013 -0800
    12.2 +++ b/src/share/vm/c1/c1_GraphBuilder.cpp	Thu Nov 21 12:30:35 2013 -0800
    12.3 @@ -4338,6 +4338,11 @@
    12.4  #endif // PRODUCT
    12.5  
    12.6  void GraphBuilder::profile_call(ciMethod* callee, Value recv, ciKlass* known_holder, Values* obj_args, bool inlined) {
    12.7 +  // A default method's holder is an interface
    12.8 +  if (known_holder != NULL && known_holder->is_interface()) {
    12.9 +    assert(known_holder->is_instance_klass() && ((ciInstanceKlass*)known_holder)->has_default_methods(), "should be default method");
   12.10 +    known_holder = NULL;
   12.11 +  }
   12.12    append(new ProfileCall(method(), bci(), callee, recv, known_holder, obj_args, inlined));
   12.13  }
   12.14  
    13.1 --- a/src/share/vm/c1/c1_LIRGenerator.cpp	Wed Nov 20 11:08:09 2013 -0800
    13.2 +++ b/src/share/vm/c1/c1_LIRGenerator.cpp	Thu Nov 21 12:30:35 2013 -0800
    13.3 @@ -2574,8 +2574,25 @@
    13.4    __ jump(x->default_sux());
    13.5  }
    13.6  
    13.7 -
    13.8 -ciKlass* LIRGenerator::profile_arg_type(ciMethodData* md, int md_base_offset, int md_offset, intptr_t profiled_k, Value arg, LIR_Opr& mdp, bool not_null, ciKlass* signature_k) {
    13.9 +/**
   13.10 + * Emit profiling code if needed for arguments, parameters, return value types
   13.11 + *
   13.12 + * @param md                    MDO the code will update at runtime
   13.13 + * @param md_base_offset        common offset in the MDO for this profile and subsequent ones
   13.14 + * @param md_offset             offset in the MDO (on top of md_base_offset) for this profile
   13.15 + * @param profiled_k            current profile
   13.16 + * @param obj                   IR node for the object to be profiled
   13.17 + * @param mdp                   register to hold the pointer inside the MDO (md + md_base_offset).
   13.18 + *                              Set once we find an update to make and use for next ones.
   13.19 + * @param not_null              true if we know obj cannot be null
   13.20 + * @param signature_at_call_k   signature at call for obj
   13.21 + * @param callee_signature_k    signature of callee for obj
   13.22 + *                              at call and callee signatures differ at method handle call
   13.23 + * @return                      the only klass we know will ever be seen at this profile point
   13.24 + */
   13.25 +ciKlass* LIRGenerator::profile_type(ciMethodData* md, int md_base_offset, int md_offset, intptr_t profiled_k,
   13.26 +                                    Value obj, LIR_Opr& mdp, bool not_null, ciKlass* signature_at_call_k,
   13.27 +                                    ciKlass* callee_signature_k) {
   13.28    ciKlass* result = NULL;
   13.29    bool do_null = !not_null && !TypeEntries::was_null_seen(profiled_k);
   13.30    bool do_update = !TypeEntries::is_type_unknown(profiled_k);
   13.31 @@ -2590,9 +2607,9 @@
   13.32    if (do_update) {
   13.33      // try to find exact type, using CHA if possible, so that loading
   13.34      // the klass from the object can be avoided
   13.35 -    ciType* type = arg->exact_type();
   13.36 +    ciType* type = obj->exact_type();
   13.37      if (type == NULL) {
   13.38 -      type = arg->declared_type();
   13.39 +      type = obj->declared_type();
   13.40        type = comp->cha_exact_type(type);
   13.41      }
   13.42      assert(type == NULL || type->is_klass(), "type should be class");
   13.43 @@ -2608,23 +2625,33 @@
   13.44    ciKlass* exact_signature_k = NULL;
   13.45    if (do_update) {
   13.46      // Is the type from the signature exact (the only one possible)?
   13.47 -    exact_signature_k = signature_k->exact_klass();
   13.48 +    exact_signature_k = signature_at_call_k->exact_klass();
   13.49      if (exact_signature_k == NULL) {
   13.50 -      exact_signature_k = comp->cha_exact_type(signature_k);
   13.51 +      exact_signature_k = comp->cha_exact_type(signature_at_call_k);
   13.52      } else {
   13.53        result = exact_signature_k;
   13.54 -      do_update = false;
   13.55        // Known statically. No need to emit any code: prevent
   13.56        // LIR_Assembler::emit_profile_type() from emitting useless code
   13.57        profiled_k = ciTypeEntries::with_status(result, profiled_k);
   13.58      }
   13.59      if (exact_signature_k != NULL && exact_klass != exact_signature_k) {
   13.60 -      assert(exact_klass == NULL, "arg and signature disagree?");
   13.61 +      assert(exact_klass == NULL, "obj and signature disagree?");
   13.62        // sometimes the type of the signature is better than the best type
   13.63        // the compiler has
   13.64        exact_klass = exact_signature_k;
   13.65 -      do_update = exact_klass == NULL || ciTypeEntries::valid_ciklass(profiled_k) != exact_klass;
   13.66      }
   13.67 +    if (callee_signature_k != NULL &&
   13.68 +        callee_signature_k != signature_at_call_k) {
   13.69 +      ciKlass* improved_klass = callee_signature_k->exact_klass();
   13.70 +      if (improved_klass == NULL) {
   13.71 +        improved_klass = comp->cha_exact_type(callee_signature_k);
   13.72 +      }
   13.73 +      if (improved_klass != NULL && exact_klass != improved_klass) {
   13.74 +        assert(exact_klass == NULL, "obj and signature disagree?");
   13.75 +        exact_klass = exact_signature_k;
   13.76 +      }
   13.77 +    }
   13.78 +    do_update = exact_klass == NULL || ciTypeEntries::valid_ciklass(profiled_k) != exact_klass;
   13.79    }
   13.80  
   13.81    if (!do_null && !do_update) {
   13.82 @@ -2640,7 +2667,7 @@
   13.83        __ leal(LIR_OprFact::address(base_type_address), mdp);
   13.84      }
   13.85    }
   13.86 -  LIRItem value(arg, this);
   13.87 +  LIRItem value(obj, this);
   13.88    value.load_item();
   13.89    __ profile_type(new LIR_Address(mdp, md_offset, T_METADATA),
   13.90                    value.result(), exact_klass, profiled_k, new_pointer_register(), not_null, exact_signature_k != NULL);
   13.91 @@ -2665,9 +2692,9 @@
   13.92          if (t == T_OBJECT || t == T_ARRAY) {
   13.93            intptr_t profiled_k = parameters->type(j);
   13.94            Local* local = x->state()->local_at(java_index)->as_Local();
   13.95 -          ciKlass* exact = profile_arg_type(md, md->byte_offset_of_slot(parameters_type_data, ParametersTypeData::type_offset(0)),
   13.96 -                                            in_bytes(ParametersTypeData::type_offset(j)) - in_bytes(ParametersTypeData::type_offset(0)),
   13.97 -                                            profiled_k, local, mdp, false, local->declared_type()->as_klass());
   13.98 +          ciKlass* exact = profile_type(md, md->byte_offset_of_slot(parameters_type_data, ParametersTypeData::type_offset(0)),
   13.99 +                                        in_bytes(ParametersTypeData::type_offset(j)) - in_bytes(ParametersTypeData::type_offset(0)),
  13.100 +                                        profiled_k, local, mdp, false, local->declared_type()->as_klass(), NULL);
  13.101            // If the profile is known statically set it once for all and do not emit any code
  13.102            if (exact != NULL) {
  13.103              md->set_parameter_type(j, exact);
  13.104 @@ -3129,19 +3156,28 @@
  13.105        Bytecodes::Code bc = x->method()->java_code_at_bci(bci);
  13.106        int start = 0;
  13.107        int stop = data->is_CallTypeData() ? ((ciCallTypeData*)data)->number_of_arguments() : ((ciVirtualCallTypeData*)data)->number_of_arguments();
  13.108 -      if (x->nb_profiled_args() < stop) {
  13.109 -        // if called through method handle invoke, some arguments may have been popped
  13.110 -        stop = x->nb_profiled_args();
  13.111 +      if (x->inlined() && x->callee()->is_static() && Bytecodes::has_receiver(bc)) {
  13.112 +        // first argument is not profiled at call (method handle invoke)
  13.113 +        assert(x->method()->raw_code_at_bci(bci) == Bytecodes::_invokehandle, "invokehandle expected");
  13.114 +        start = 1;
  13.115        }
  13.116 -      ciSignature* sig = x->callee()->signature();
  13.117 +      ciSignature* callee_signature = x->callee()->signature();
  13.118        // method handle call to virtual method
  13.119        bool has_receiver = x->inlined() && !x->callee()->is_static() && !Bytecodes::has_receiver(bc);
  13.120 -      ciSignatureStream sig_stream(sig, has_receiver ? x->callee()->holder() : NULL);
  13.121 -      for (int i = 0; i < stop; i++) {
  13.122 +      ciSignatureStream callee_signature_stream(callee_signature, has_receiver ? x->callee()->holder() : NULL);
  13.123 +
  13.124 +      bool ignored_will_link;
  13.125 +      ciSignature* signature_at_call = NULL;
  13.126 +      x->method()->get_method_at_bci(bci, ignored_will_link, &signature_at_call);
  13.127 +      ciSignatureStream signature_at_call_stream(signature_at_call);
  13.128 +
  13.129 +      // if called through method handle invoke, some arguments may have been popped
  13.130 +      for (int i = 0; i < stop && i+start < x->nb_profiled_args(); i++) {
  13.131          int off = in_bytes(TypeEntriesAtCall::argument_type_offset(i)) - in_bytes(TypeEntriesAtCall::args_data_offset());
  13.132 -        ciKlass* exact = profile_arg_type(md, base_offset, off,
  13.133 -                                          args->type(i), x->profiled_arg_at(i+start), mdp,
  13.134 -                                          !x->arg_needs_null_check(i+start), sig_stream.next_klass());
  13.135 +        ciKlass* exact = profile_type(md, base_offset, off,
  13.136 +                                      args->type(i), x->profiled_arg_at(i+start), mdp,
  13.137 +                                      !x->arg_needs_null_check(i+start),
  13.138 +                                      signature_at_call_stream.next_klass(), callee_signature_stream.next_klass());
  13.139          if (exact != NULL) {
  13.140            md->set_argument_type(bci, i, exact);
  13.141          }
  13.142 @@ -3176,8 +3212,8 @@
  13.143          int bci = x->bci_of_invoke();
  13.144          Bytecodes::Code bc = x->method()->java_code_at_bci(bci);
  13.145          // The first parameter is the receiver so that's what we start
  13.146 -        // with if it exists. On exception if method handle call to
  13.147 -        // virtual method has receiver in the args list
  13.148 +        // with if it exists. One exception is method handle call to
  13.149 +        // virtual method: the receiver is in the args list
  13.150          if (arg == NULL || !Bytecodes::has_receiver(bc)) {
  13.151            i = 1;
  13.152            arg = x->profiled_arg_at(0);
  13.153 @@ -3186,9 +3222,9 @@
  13.154          int k = 0; // to iterate on the profile data
  13.155          for (;;) {
  13.156            intptr_t profiled_k = parameters->type(k);
  13.157 -          ciKlass* exact = profile_arg_type(md, md->byte_offset_of_slot(parameters_type_data, ParametersTypeData::type_offset(0)),
  13.158 -                                            in_bytes(ParametersTypeData::type_offset(k)) - in_bytes(ParametersTypeData::type_offset(0)),
  13.159 -                                            profiled_k, arg, mdp, not_null, sig_stream.next_klass());
  13.160 +          ciKlass* exact = profile_type(md, md->byte_offset_of_slot(parameters_type_data, ParametersTypeData::type_offset(0)),
  13.161 +                                        in_bytes(ParametersTypeData::type_offset(k)) - in_bytes(ParametersTypeData::type_offset(0)),
  13.162 +                                        profiled_k, arg, mdp, not_null, sig_stream.next_klass(), NULL);
  13.163            // If the profile is known statically set it once for all and do not emit any code
  13.164            if (exact != NULL) {
  13.165              md->set_parameter_type(k, exact);
  13.166 @@ -3247,9 +3283,16 @@
  13.167    assert(data->is_CallTypeData() || data->is_VirtualCallTypeData(), "wrong profile data type");
  13.168    ciReturnTypeEntry* ret = data->is_CallTypeData() ? ((ciCallTypeData*)data)->ret() : ((ciVirtualCallTypeData*)data)->ret();
  13.169    LIR_Opr mdp = LIR_OprFact::illegalOpr;
  13.170 -  ciKlass* exact = profile_arg_type(md, 0, md->byte_offset_of_slot(data, ret->type_offset()),
  13.171 -                                    ret->type(), x->ret(), mdp,
  13.172 -                                    !x->needs_null_check(), x->callee()->signature()->return_type()->as_klass());
  13.173 +
  13.174 +  bool ignored_will_link;
  13.175 +  ciSignature* signature_at_call = NULL;
  13.176 +  x->method()->get_method_at_bci(bci, ignored_will_link, &signature_at_call);
  13.177 +
  13.178 +  ciKlass* exact = profile_type(md, 0, md->byte_offset_of_slot(data, ret->type_offset()),
  13.179 +                                ret->type(), x->ret(), mdp,
  13.180 +                                !x->needs_null_check(),
  13.181 +                                signature_at_call->return_type()->as_klass(),
  13.182 +                                x->callee()->signature()->return_type()->as_klass());
  13.183    if (exact != NULL) {
  13.184      md->set_return_type(bci, exact);
  13.185    }
    14.1 --- a/src/share/vm/c1/c1_LIRGenerator.hpp	Wed Nov 20 11:08:09 2013 -0800
    14.2 +++ b/src/share/vm/c1/c1_LIRGenerator.hpp	Thu Nov 21 12:30:35 2013 -0800
    14.3 @@ -434,7 +434,9 @@
    14.4    void do_ThreadIDIntrinsic(Intrinsic* x);
    14.5    void do_ClassIDIntrinsic(Intrinsic* x);
    14.6  #endif
    14.7 -  ciKlass* profile_arg_type(ciMethodData* md, int md_first_offset, int md_offset, intptr_t profiled_k, Value arg, LIR_Opr& mdp, bool not_null, ciKlass* signature_k);
    14.8 +  ciKlass* profile_type(ciMethodData* md, int md_first_offset, int md_offset, intptr_t profiled_k,
    14.9 +                        Value arg, LIR_Opr& mdp, bool not_null, ciKlass* signature_at_call_k,
   14.10 +                        ciKlass* callee_signature_k);
   14.11    void profile_arguments(ProfileCall* x);
   14.12    void profile_parameters(Base* x);
   14.13    void profile_parameters_at_call(ProfileCall* x);
    15.1 --- a/src/share/vm/c1/c1_LinearScan.cpp	Wed Nov 20 11:08:09 2013 -0800
    15.2 +++ b/src/share/vm/c1/c1_LinearScan.cpp	Thu Nov 21 12:30:35 2013 -0800
    15.3 @@ -1138,8 +1138,10 @@
    15.4          }
    15.5        }
    15.6      }
    15.7 -
    15.8 -  } else if (opr_type != T_LONG) {
    15.9 +    // We want to sometimes use logical operations on pointers, in particular in GC barriers.
   15.10 +    // Since 64bit logical operations do not current support operands on stack, we have to make sure
   15.11 +    // T_OBJECT doesn't get spilled along with T_LONG.
   15.12 +  } else if (opr_type != T_LONG LP64_ONLY(&& opr_type != T_OBJECT)) {
   15.13      // integer instruction (note: long operands must always be in register)
   15.14      switch (op->code()) {
   15.15        case lir_cmp:
    16.1 --- a/src/share/vm/c1/c1_globals.hpp	Wed Nov 20 11:08:09 2013 -0800
    16.2 +++ b/src/share/vm/c1/c1_globals.hpp	Thu Nov 21 12:30:35 2013 -0800
    16.3 @@ -344,9 +344,6 @@
    16.4    diagnostic(bool, C1PatchInvokeDynamic, true,                              \
    16.5               "Patch invokedynamic appendix not known at compile time")      \
    16.6                                                                              \
    16.7 -  develop(intx, MaxForceInlineLevel, 100,                                   \
    16.8 -          "maximum number of nested @ForceInline calls that are inlined")   \
    16.9 -                                                                            \
   16.10  
   16.11  
   16.12  // Read default values for c1 globals
    17.1 --- a/src/share/vm/ci/ciEnv.cpp	Wed Nov 20 11:08:09 2013 -0800
    17.2 +++ b/src/share/vm/ci/ciEnv.cpp	Thu Nov 21 12:30:35 2013 -0800
    17.3 @@ -935,7 +935,9 @@
    17.4  
    17.5      // Prevent SystemDictionary::add_to_hierarchy from running
    17.6      // and invalidating our dependencies until we install this method.
    17.7 +    // No safepoints are allowed. Otherwise, class redefinition can occur in between.
    17.8      MutexLocker ml(Compile_lock);
    17.9 +    No_Safepoint_Verifier nsv;
   17.10  
   17.11      // Change in Jvmti state may invalidate compilation.
   17.12      if (!failing() &&
   17.13 @@ -1001,16 +1003,6 @@
   17.14      // Free codeBlobs
   17.15      code_buffer->free_blob();
   17.16  
   17.17 -    // stress test 6243940 by immediately making the method
   17.18 -    // non-entrant behind the system's back. This has serious
   17.19 -    // side effects on the code cache and is not meant for
   17.20 -    // general stress testing
   17.21 -    if (nm != NULL && StressNonEntrant) {
   17.22 -      MutexLockerEx pl(Patching_lock, Mutex::_no_safepoint_check_flag);
   17.23 -      NativeJump::patch_verified_entry(nm->entry_point(), nm->verified_entry_point(),
   17.24 -                  SharedRuntime::get_handle_wrong_method_stub());
   17.25 -    }
   17.26 -
   17.27      if (nm == NULL) {
   17.28        // The CodeCache is full.  Print out warning and disable compilation.
   17.29        record_failure("code cache is full");
   17.30 @@ -1036,11 +1028,11 @@
   17.31              char *method_name = method->name_and_sig_as_C_string();
   17.32              tty->print_cr("Replacing method %s", method_name);
   17.33            }
   17.34 -          if (old != NULL ) {
   17.35 +          if (old != NULL) {
   17.36              old->make_not_entrant();
   17.37            }
   17.38          }
   17.39 -        if (TraceNMethodInstalls ) {
   17.40 +        if (TraceNMethodInstalls) {
   17.41            ResourceMark rm;
   17.42            char *method_name = method->name_and_sig_as_C_string();
   17.43            ttyLocker ttyl;
   17.44 @@ -1051,7 +1043,7 @@
   17.45          // Allow the code to be executed
   17.46          method->set_code(method, nm);
   17.47        } else {
   17.48 -        if (TraceNMethodInstalls ) {
   17.49 +        if (TraceNMethodInstalls) {
   17.50            ResourceMark rm;
   17.51            char *method_name = method->name_and_sig_as_C_string();
   17.52            ttyLocker ttyl;
   17.53 @@ -1061,7 +1053,6 @@
   17.54                          entry_bci);
   17.55          }
   17.56          method->method_holder()->add_osr_nmethod(nm);
   17.57 -
   17.58        }
   17.59      }
   17.60    }
    18.1 --- a/src/share/vm/ci/ciMethodData.hpp	Wed Nov 20 11:08:09 2013 -0800
    18.2 +++ b/src/share/vm/ci/ciMethodData.hpp	Thu Nov 21 12:30:35 2013 -0800
    18.3 @@ -77,7 +77,9 @@
    18.4    static ciKlass* valid_ciklass(intptr_t k) {
    18.5      if (!TypeEntries::is_type_none(k) &&
    18.6          !TypeEntries::is_type_unknown(k)) {
    18.7 -      return (ciKlass*)TypeEntries::klass_part(k);
    18.8 +      ciKlass* res = (ciKlass*)TypeEntries::klass_part(k);
    18.9 +      assert(res != NULL, "invalid");
   18.10 +      return res;
   18.11      } else {
   18.12        return NULL;
   18.13      }
    19.1 --- a/src/share/vm/classfile/classFileParser.cpp	Wed Nov 20 11:08:09 2013 -0800
    19.2 +++ b/src/share/vm/classfile/classFileParser.cpp	Thu Nov 21 12:30:35 2013 -0800
    19.3 @@ -4080,7 +4080,7 @@
    19.4  
    19.5      // Generate any default methods - default methods are interface methods
    19.6      // that have a default implementation.  This is new with Lambda project.
    19.7 -    if (has_default_methods && !access_flags.is_interface() ) {
    19.8 +    if (has_default_methods ) {
    19.9        DefaultMethods::generate_default_methods(
   19.10            this_klass(), &all_mirandas, CHECK_(nullHandle));
   19.11      }
    20.1 --- a/src/share/vm/classfile/defaultMethods.cpp	Wed Nov 20 11:08:09 2013 -0800
    20.2 +++ b/src/share/vm/classfile/defaultMethods.cpp	Thu Nov 21 12:30:35 2013 -0800
    20.3 @@ -171,8 +171,12 @@
    20.4    }
    20.5    bool is_cancelled() const { return _cancelled; }
    20.6  
    20.7 +  // This code used to skip interface classes because their only
    20.8 +  // superclass was j.l.Object which would be also covered by class
    20.9 +  // superclass hierarchy walks. Now that the starting point can be
   20.10 +  // an interface, we must ensure we catch j.l.Object as the super.
   20.11    static bool has_super(InstanceKlass* cls) {
   20.12 -    return cls->super() != NULL && !cls->is_interface();
   20.13 +    return cls->super() != NULL;
   20.14    }
   20.15  
   20.16    Node* node_at_depth(int i) const {
   20.17 @@ -391,24 +395,32 @@
   20.18        return;
   20.19      }
   20.20  
   20.21 +    // Qualified methods are maximally-specific methods
   20.22 +    // These include public, instance concrete (=default) and abstract methods
   20.23      GrowableArray<Method*> qualified_methods;
   20.24 +    int num_defaults = 0;
   20.25 +    int default_index = -1;
   20.26 +    int qualified_index = -1;
   20.27      for (int i = 0; i < _members.length(); ++i) {
   20.28        Pair<Method*,QualifiedState> entry = _members.at(i);
   20.29        if (entry.second == QUALIFIED) {
   20.30          qualified_methods.append(entry.first);
   20.31 +        qualified_index++;
   20.32 +        if (entry.first->is_default_method()) {
   20.33 +          num_defaults++;
   20.34 +          default_index = qualified_index;
   20.35 +
   20.36 +        }
   20.37        }
   20.38      }
   20.39  
   20.40      if (qualified_methods.length() == 0) {
   20.41        _exception_message = generate_no_defaults_message(CHECK);
   20.42        _exception_name = vmSymbols::java_lang_AbstractMethodError();
   20.43 -    } else if (qualified_methods.length() == 1) {
   20.44 -      // leave abstract methods alone, they will be found via normal search path
   20.45 -      Method* method = qualified_methods.at(0);
   20.46 -      if (!method->is_abstract()) {
   20.47 -        _selected_target = qualified_methods.at(0);
   20.48 -      }
   20.49 -    } else {
   20.50 +    // If only one qualified method is default, select that
   20.51 +    } else if (num_defaults == 1) {
   20.52 +        _selected_target = qualified_methods.at(default_index);
   20.53 +    } else if (num_defaults > 1) {
   20.54        _exception_message = generate_conflicts_message(&qualified_methods,CHECK);
   20.55        _exception_name = vmSymbols::java_lang_IncompatibleClassChangeError();
   20.56        if (TraceDefaultMethods) {
   20.57 @@ -416,6 +428,7 @@
   20.58          tty->print_cr("");
   20.59        }
   20.60      }
   20.61 +    // leave abstract methods alone, they will be found via normal search path
   20.62    }
   20.63  
   20.64    bool contains_signature(Symbol* query) {
   20.65 @@ -695,8 +708,10 @@
   20.66      Method* m = iklass->find_method(_method_name, _method_signature);
   20.67      // private interface methods are not candidates for default methods
   20.68      // invokespecial to private interface methods doesn't use default method logic
   20.69 +    // The overpasses are your supertypes' errors, we do not include them
   20.70      // future: take access controls into account for superclass methods
   20.71 -    if (m != NULL && !m->is_static() && (!iklass->is_interface() || m->is_public())) {
   20.72 +    if (m != NULL && !m->is_static() && !m->is_overpass() &&
   20.73 +         (!iklass->is_interface() || m->is_public())) {
   20.74        if (_family == NULL) {
   20.75          _family = new StatefulMethodFamily();
   20.76        }
   20.77 @@ -772,7 +787,8 @@
   20.78  #ifndef PRODUCT
   20.79    if (TraceDefaultMethods) {
   20.80      ResourceMark rm;  // be careful with these!
   20.81 -    tty->print_cr("Class %s requires default method processing",
   20.82 +    tty->print_cr("%s %s requires default method processing",
   20.83 +        klass->is_interface() ? "Interface" : "Class",
   20.84          klass->name()->as_klass_external_name());
   20.85      PrintHierarchy printer;
   20.86      printer.run(klass);
   20.87 @@ -797,7 +813,7 @@
   20.88   }
   20.89  #ifndef PRODUCT
   20.90    if (TraceDefaultMethods) {
   20.91 -    tty->print_cr("Creating overpasses...");
   20.92 +    tty->print_cr("Creating defaults and overpasses...");
   20.93    }
   20.94  #endif // ndef PRODUCT
   20.95  
   20.96 @@ -1067,7 +1083,9 @@
   20.97    klass->set_initial_method_idnum(new_size);
   20.98  
   20.99    ClassLoaderData* cld = klass->class_loader_data();
  20.100 -  MetadataFactory::free_array(cld, original_methods);
  20.101 +  if (original_methods ->length() > 0) {
  20.102 +    MetadataFactory::free_array(cld, original_methods);
  20.103 +  }
  20.104    if (original_ordering->length() > 0) {
  20.105      klass->set_method_ordering(merged_ordering);
  20.106      MetadataFactory::free_array(cld, original_ordering);
    21.1 --- a/src/share/vm/classfile/metadataOnStackMark.cpp	Wed Nov 20 11:08:09 2013 -0800
    21.2 +++ b/src/share/vm/classfile/metadataOnStackMark.cpp	Thu Nov 21 12:30:35 2013 -0800
    21.3 @@ -27,6 +27,7 @@
    21.4  #include "code/codeCache.hpp"
    21.5  #include "compiler/compileBroker.hpp"
    21.6  #include "oops/metadata.hpp"
    21.7 +#include "prims/jvmtiImpl.hpp"
    21.8  #include "runtime/synchronizer.hpp"
    21.9  #include "runtime/thread.hpp"
   21.10  #include "utilities/growableArray.hpp"
   21.11 @@ -48,6 +49,7 @@
   21.12    Threads::metadata_do(Metadata::mark_on_stack);
   21.13    CodeCache::alive_nmethods_do(nmethod::mark_on_stack);
   21.14    CompileBroker::mark_on_stack();
   21.15 +  JvmtiCurrentBreakpoints::metadata_do(Metadata::mark_on_stack);
   21.16  }
   21.17  
   21.18  MetadataOnStackMark::~MetadataOnStackMark() {
    22.1 --- a/src/share/vm/code/nmethod.cpp	Wed Nov 20 11:08:09 2013 -0800
    22.2 +++ b/src/share/vm/code/nmethod.cpp	Thu Nov 21 12:30:35 2013 -0800
    22.3 @@ -618,21 +618,18 @@
    22.4          // record this nmethod as dependent on this klass
    22.5          InstanceKlass::cast(klass)->add_dependent_nmethod(nm);
    22.6        }
    22.7 -    }
    22.8 -    NOT_PRODUCT(if (nm != NULL)  nmethod_stats.note_nmethod(nm));
    22.9 -    if (PrintAssembly && nm != NULL) {
   22.10 -      Disassembler::decode(nm);
   22.11 +      NOT_PRODUCT(nmethod_stats.note_nmethod(nm));
   22.12 +      if (PrintAssembly) {
   22.13 +        Disassembler::decode(nm);
   22.14 +      }
   22.15      }
   22.16    }
   22.17 -
   22.18 -  // verify nmethod
   22.19 -  debug_only(if (nm) nm->verify();) // might block
   22.20 -
   22.21 +  // Do verification and logging outside CodeCache_lock.
   22.22    if (nm != NULL) {
   22.23 +    // Safepoints in nmethod::verify aren't allowed because nm hasn't been installed yet.
   22.24 +    DEBUG_ONLY(nm->verify();)
   22.25      nm->log_new_nmethod();
   22.26    }
   22.27 -
   22.28 -  // done
   22.29    return nm;
   22.30  }
   22.31  
   22.32 @@ -1262,7 +1259,7 @@
   22.33  
   22.34    set_osr_link(NULL);
   22.35    //set_scavenge_root_link(NULL); // done by prune_scavenge_root_nmethods
   22.36 -  NMethodSweeper::notify();
   22.37 +  NMethodSweeper::report_state_change(this);
   22.38  }
   22.39  
   22.40  void nmethod::invalidate_osr_method() {
   22.41 @@ -1296,7 +1293,9 @@
   22.42    }
   22.43  }
   22.44  
   22.45 -// Common functionality for both make_not_entrant and make_zombie
   22.46 +/**
   22.47 + * Common functionality for both make_not_entrant and make_zombie
   22.48 + */
   22.49  bool nmethod::make_not_entrant_or_zombie(unsigned int state) {
   22.50    assert(state == zombie || state == not_entrant, "must be zombie or not_entrant");
   22.51    assert(!is_zombie(), "should not already be a zombie");
   22.52 @@ -1420,9 +1419,7 @@
   22.53      tty->print_cr("nmethod <" INTPTR_FORMAT "> code made %s", this, (state == not_entrant) ? "not entrant" : "zombie");
   22.54    }
   22.55  
   22.56 -  // Make sweeper aware that there is a zombie method that needs to be removed
   22.57 -  NMethodSweeper::notify();
   22.58 -
   22.59 +  NMethodSweeper::report_state_change(this);
   22.60    return true;
   22.61  }
   22.62  
   22.63 @@ -2395,20 +2392,23 @@
   22.64  
   22.65  
   22.66  void nmethod::verify_interrupt_point(address call_site) {
   22.67 -  // This code does not work in release mode since
   22.68 -  // owns_lock only is available in debug mode.
   22.69 -  CompiledIC* ic = NULL;
   22.70 -  Thread *cur = Thread::current();
   22.71 -  if (CompiledIC_lock->owner() == cur ||
   22.72 -      ((cur->is_VM_thread() || cur->is_ConcurrentGC_thread()) &&
   22.73 -       SafepointSynchronize::is_at_safepoint())) {
   22.74 -    ic = CompiledIC_at(this, call_site);
   22.75 -    CHECK_UNHANDLED_OOPS_ONLY(Thread::current()->clear_unhandled_oops());
   22.76 -  } else {
   22.77 -    MutexLocker ml_verify (CompiledIC_lock);
   22.78 -    ic = CompiledIC_at(this, call_site);
   22.79 +  // Verify IC only when nmethod installation is finished.
   22.80 +  bool is_installed = (method()->code() == this) // nmethod is in state 'alive' and installed
   22.81 +                      || !this->is_in_use();     // nmethod is installed, but not in 'alive' state
   22.82 +  if (is_installed) {
   22.83 +    Thread *cur = Thread::current();
   22.84 +    if (CompiledIC_lock->owner() == cur ||
   22.85 +        ((cur->is_VM_thread() || cur->is_ConcurrentGC_thread()) &&
   22.86 +         SafepointSynchronize::is_at_safepoint())) {
   22.87 +      CompiledIC_at(this, call_site);
   22.88 +      CHECK_UNHANDLED_OOPS_ONLY(Thread::current()->clear_unhandled_oops());
   22.89 +    } else {
   22.90 +      MutexLocker ml_verify (CompiledIC_lock);
   22.91 +      CompiledIC_at(this, call_site);
   22.92 +    }
   22.93    }
   22.94 -  PcDesc* pd = pc_desc_at(ic->end_of_call());
   22.95 +
   22.96 +  PcDesc* pd = pc_desc_at(nativeCall_at(call_site)->return_address());
   22.97    assert(pd != NULL, "PcDesc must exist");
   22.98    for (ScopeDesc* sd = new ScopeDesc(this, pd->scope_decode_offset(),
   22.99                                       pd->obj_decode_offset(), pd->should_reexecute(),
    23.1 --- a/src/share/vm/compiler/compileBroker.cpp	Wed Nov 20 11:08:09 2013 -0800
    23.2 +++ b/src/share/vm/compiler/compileBroker.cpp	Thu Nov 21 12:30:35 2013 -0800
    23.3 @@ -126,6 +126,7 @@
    23.4  
    23.5  bool CompileBroker::_initialized = false;
    23.6  volatile bool CompileBroker::_should_block = false;
    23.7 +volatile jint CompileBroker::_print_compilation_warning = 0;
    23.8  volatile jint CompileBroker::_should_compile_new_jobs = run_compilation;
    23.9  
   23.10  // The installed compiler(s)
   23.11 @@ -2027,11 +2028,10 @@
   23.12  #endif
   23.13  }
   23.14  
   23.15 -// ------------------------------------------------------------------
   23.16 -// CompileBroker::handle_full_code_cache
   23.17 -//
   23.18 -// The CodeCache is full.  Print out warning and disable compilation or
   23.19 -// try code cache cleaning so compilation can continue later.
   23.20 +/**
   23.21 + * The CodeCache is full.  Print out warning and disable compilation
   23.22 + * or try code cache cleaning so compilation can continue later.
   23.23 + */
   23.24  void CompileBroker::handle_full_code_cache() {
   23.25    UseInterpreter = true;
   23.26    if (UseCompiler || AlwaysCompileLoopMethods ) {
   23.27 @@ -2048,12 +2048,9 @@
   23.28        xtty->stamp();
   23.29        xtty->end_elem();
   23.30      }
   23.31 -    warning("CodeCache is full. Compiler has been disabled.");
   23.32 -    warning("Try increasing the code cache size using -XX:ReservedCodeCacheSize=");
   23.33  
   23.34      CodeCache::report_codemem_full();
   23.35  
   23.36 -
   23.37  #ifndef PRODUCT
   23.38      if (CompileTheWorld || ExitOnFullCodeCache) {
   23.39        codecache_print(/* detailed= */ true);
   23.40 @@ -2066,17 +2063,22 @@
   23.41        // Since code cache is full, immediately stop new compiles
   23.42        if (CompileBroker::set_should_compile_new_jobs(CompileBroker::stop_compilation)) {
   23.43          NMethodSweeper::log_sweep("disable_compiler");
   23.44 -
   23.45 -        // Switch to 'vm_state'. This ensures that possibly_sweep() can be called
   23.46 -        // without having to consider the state in which the current thread is.
   23.47 -        ThreadInVMfromUnknown in_vm;
   23.48 -        NMethodSweeper::possibly_sweep();
   23.49        }
   23.50 +      // Switch to 'vm_state'. This ensures that possibly_sweep() can be called
   23.51 +      // without having to consider the state in which the current thread is.
   23.52 +      ThreadInVMfromUnknown in_vm;
   23.53 +      NMethodSweeper::possibly_sweep();
   23.54      } else {
   23.55        disable_compilation_forever();
   23.56      }
   23.57 +
   23.58 +    // Print warning only once
   23.59 +    if (should_print_compiler_warning()) {
   23.60 +      warning("CodeCache is full. Compiler has been disabled.");
   23.61 +      warning("Try increasing the code cache size using -XX:ReservedCodeCacheSize=");
   23.62 +      codecache_print(/* detailed= */ true);
   23.63 +    }
   23.64    }
   23.65 -  codecache_print(/* detailed= */ true);
   23.66  }
   23.67  
   23.68  // ------------------------------------------------------------------
    24.1 --- a/src/share/vm/compiler/compileBroker.hpp	Wed Nov 20 11:08:09 2013 -0800
    24.2 +++ b/src/share/vm/compiler/compileBroker.hpp	Thu Nov 21 12:30:35 2013 -0800
    24.3 @@ -315,6 +315,8 @@
    24.4    static int _sum_nmethod_code_size;
    24.5    static long _peak_compilation_time;
    24.6  
    24.7 +  static volatile jint _print_compilation_warning;
    24.8 +
    24.9    static CompilerThread* make_compiler_thread(const char* name, CompileQueue* queue, CompilerCounters* counters, AbstractCompiler* comp, TRAPS);
   24.10    static void init_compiler_threads(int c1_compiler_count, int c2_compiler_count);
   24.11    static bool compilation_is_complete  (methodHandle method, int osr_bci, int comp_level);
   24.12 @@ -418,7 +420,11 @@
   24.13      return _should_compile_new_jobs == shutdown_compilaton;
   24.14    }
   24.15    static void handle_full_code_cache();
   24.16 -
   24.17 +  // Ensures that warning is only printed once.
   24.18 +  static bool should_print_compiler_warning() {
   24.19 +    jint old = Atomic::cmpxchg(1, &_print_compilation_warning, 0);
   24.20 +    return old == 0;
   24.21 +  }
   24.22    // Return total compilation ticks
   24.23    static jlong total_compilation_ticks() {
   24.24      return _perf_total_compilation != NULL ? _perf_total_compilation->get_value() : 0;
    25.1 --- a/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp	Wed Nov 20 11:08:09 2013 -0800
    25.2 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp	Thu Nov 21 12:30:35 2013 -0800
    25.3 @@ -47,8 +47,9 @@
    25.4  // ConcurrentMarkSweepPolicy methods
    25.5  //
    25.6  
    25.7 -ConcurrentMarkSweepPolicy::ConcurrentMarkSweepPolicy() {
    25.8 -  initialize_all();
    25.9 +void ConcurrentMarkSweepPolicy::initialize_alignments() {
   25.10 +  _space_alignment = _gen_alignment = (uintx)Generation::GenGrain;
   25.11 +  _heap_alignment = compute_heap_alignment();
   25.12  }
   25.13  
   25.14  void ConcurrentMarkSweepPolicy::initialize_generations() {
    26.1 --- a/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp	Wed Nov 20 11:08:09 2013 -0800
    26.2 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.hpp	Thu Nov 21 12:30:35 2013 -0800
    26.3 @@ -29,10 +29,11 @@
    26.4  
    26.5  class ConcurrentMarkSweepPolicy : public TwoGenerationCollectorPolicy {
    26.6   protected:
    26.7 +  void initialize_alignments();
    26.8    void initialize_generations();
    26.9  
   26.10   public:
   26.11 -  ConcurrentMarkSweepPolicy();
   26.12 +  ConcurrentMarkSweepPolicy() {}
   26.13  
   26.14    ConcurrentMarkSweepPolicy* as_concurrent_mark_sweep_policy() { return this; }
   26.15  
    27.1 --- a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp	Wed Nov 20 11:08:09 2013 -0800
    27.2 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp	Thu Nov 21 12:30:35 2013 -0800
    27.3 @@ -594,9 +594,9 @@
    27.4    _verification_mark_bm(0, Mutex::leaf + 1, "CMS_verification_mark_bm_lock"),
    27.5    _completed_initialization(false),
    27.6    _collector_policy(cp),
    27.7 -  _should_unload_classes(false),
    27.8 +  _should_unload_classes(CMSClassUnloadingEnabled),
    27.9    _concurrent_cycles_since_last_unload(0),
   27.10 -  _roots_scanning_options(0),
   27.11 +  _roots_scanning_options(SharedHeap::SO_None),
   27.12    _inter_sweep_estimate(CMS_SweepWeight, CMS_SweepPadding),
   27.13    _intra_sweep_estimate(CMS_SweepWeight, CMS_SweepPadding),
   27.14    _gc_tracer_cm(new (ResourceObj::C_HEAP, mtGC) CMSTracer()),
   27.15 @@ -788,14 +788,6 @@
   27.16               && _survivor_chunk_index == 0),
   27.17           "Error");
   27.18  
   27.19 -  // Choose what strong roots should be scanned depending on verification options
   27.20 -  if (!CMSClassUnloadingEnabled) {
   27.21 -    // If class unloading is disabled we want to include all classes into the root set.
   27.22 -    add_root_scanning_option(SharedHeap::SO_AllClasses);
   27.23 -  } else {
   27.24 -    add_root_scanning_option(SharedHeap::SO_SystemClasses);
   27.25 -  }
   27.26 -
   27.27    NOT_PRODUCT(_overflow_counter = CMSMarkStackOverflowInterval;)
   27.28    _gc_counters = new CollectorCounters("CMS", 1);
   27.29    _completed_initialization = true;
   27.30 @@ -2532,6 +2524,9 @@
   27.31    // Snapshot the soft reference policy to be used in this collection cycle.
   27.32    ref_processor()->setup_policy(clear_all_soft_refs);
   27.33  
   27.34 +  // Decide if class unloading should be done
   27.35 +  update_should_unload_classes();
   27.36 +
   27.37    bool init_mark_was_synchronous = false; // until proven otherwise
   27.38    while (_collectorState != Idling) {
   27.39      if (TraceCMSState) {
   27.40 @@ -3310,7 +3305,10 @@
   27.41                               || VerifyBeforeExit;
   27.42    const  int  rso           =   SharedHeap::SO_Strings | SharedHeap::SO_CodeCache;
   27.43  
   27.44 +  // We set the proper root for this CMS cycle here.
   27.45    if (should_unload_classes()) {   // Should unload classes this cycle
   27.46 +    remove_root_scanning_option(SharedHeap::SO_AllClasses);
   27.47 +    add_root_scanning_option(SharedHeap::SO_SystemClasses);
   27.48      remove_root_scanning_option(rso);  // Shrink the root set appropriately
   27.49      set_verifying(should_verify);    // Set verification state for this cycle
   27.50      return;                            // Nothing else needs to be done at this time
   27.51 @@ -3318,6 +3316,9 @@
   27.52  
   27.53    // Not unloading classes this cycle
   27.54    assert(!should_unload_classes(), "Inconsitency!");
   27.55 +  remove_root_scanning_option(SharedHeap::SO_SystemClasses);
   27.56 +  add_root_scanning_option(SharedHeap::SO_AllClasses);
   27.57 +
   27.58    if ((!verifying() || unloaded_classes_last_cycle()) && should_verify) {
   27.59      // Include symbols, strings and code cache elements to prevent their resurrection.
   27.60      add_root_scanning_option(rso);
    28.1 --- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	Wed Nov 20 11:08:09 2013 -0800
    28.2 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	Thu Nov 21 12:30:35 2013 -0800
    28.3 @@ -2008,7 +2008,7 @@
    28.4  
    28.5    size_t init_byte_size = collector_policy()->initial_heap_byte_size();
    28.6    size_t max_byte_size = collector_policy()->max_heap_byte_size();
    28.7 -  size_t heap_alignment = collector_policy()->max_alignment();
    28.8 +  size_t heap_alignment = collector_policy()->heap_alignment();
    28.9  
   28.10    // Ensure that the sizes are properly aligned.
   28.11    Universe::check_alignment(init_byte_size, HeapRegion::GrainBytes, "g1 heap");
   28.12 @@ -6656,13 +6656,18 @@
   28.13      if (!oopDesc::is_null(heap_oop)) {
   28.14        oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
   28.15        HeapRegion* hr = _g1h->heap_region_containing(obj);
   28.16 -      assert(!hr->isHumongous(), "code root in humongous region?");
   28.17 +      assert(!hr->continuesHumongous(),
   28.18 +             err_msg("trying to add code root "PTR_FORMAT" in continuation of humongous region "HR_FORMAT
   28.19 +                     " starting at "HR_FORMAT,
   28.20 +                     _nm, HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region())));
   28.21  
   28.22        // HeapRegion::add_strong_code_root() avoids adding duplicate
   28.23        // entries but having duplicates is  OK since we "mark" nmethods
   28.24        // as visited when we scan the strong code root lists during the GC.
   28.25        hr->add_strong_code_root(_nm);
   28.26 -      assert(hr->rem_set()->strong_code_roots_list_contains(_nm), "add failed?");
   28.27 +      assert(hr->rem_set()->strong_code_roots_list_contains(_nm),
   28.28 +             err_msg("failed to add code root "PTR_FORMAT" to remembered set of region "HR_FORMAT,
   28.29 +                     _nm, HR_FORMAT_PARAMS(hr)));
   28.30      }
   28.31    }
   28.32  
   28.33 @@ -6683,9 +6688,15 @@
   28.34      if (!oopDesc::is_null(heap_oop)) {
   28.35        oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
   28.36        HeapRegion* hr = _g1h->heap_region_containing(obj);
   28.37 -      assert(!hr->isHumongous(), "code root in humongous region?");
   28.38 +      assert(!hr->continuesHumongous(),
   28.39 +             err_msg("trying to remove code root "PTR_FORMAT" in continuation of humongous region "HR_FORMAT
   28.40 +                     " starting at "HR_FORMAT,
   28.41 +                     _nm, HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region())));
   28.42 +
   28.43        hr->remove_strong_code_root(_nm);
   28.44 -      assert(!hr->rem_set()->strong_code_roots_list_contains(_nm), "remove failed?");
   28.45 +      assert(!hr->rem_set()->strong_code_roots_list_contains(_nm),
   28.46 +             err_msg("failed to remove code root "PTR_FORMAT" of region "HR_FORMAT,
   28.47 +                     _nm, HR_FORMAT_PARAMS(hr)));
   28.48      }
   28.49    }
   28.50  
   28.51 @@ -6716,7 +6727,9 @@
   28.52  class MigrateCodeRootsHeapRegionClosure: public HeapRegionClosure {
   28.53  public:
   28.54    bool doHeapRegion(HeapRegion *hr) {
   28.55 -    assert(!hr->isHumongous(), "humongous region in collection set?");
   28.56 +    assert(!hr->isHumongous(),
   28.57 +           err_msg("humongous region "HR_FORMAT" should not have been added to collection set",
   28.58 +                   HR_FORMAT_PARAMS(hr)));
   28.59      hr->migrate_strong_code_roots();
   28.60      return false;
   28.61    }
   28.62 @@ -6796,9 +6809,13 @@
   28.63  
   28.64    bool doHeapRegion(HeapRegion *hr) {
   28.65      HeapRegionRemSet* hrrs = hr->rem_set();
   28.66 -    if (hr->isHumongous()) {
   28.67 -      // Code roots should never be attached to a humongous region
   28.68 -      assert(hrrs->strong_code_roots_list_length() == 0, "sanity");
   28.69 +    if (hr->continuesHumongous()) {
   28.70 +      // Code roots should never be attached to a continuation of a humongous region
   28.71 +      assert(hrrs->strong_code_roots_list_length() == 0,
   28.72 +             err_msg("code roots should never be attached to continuations of humongous region "HR_FORMAT
   28.73 +                     " starting at "HR_FORMAT", but has "INT32_FORMAT,
   28.74 +                     HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region()),
   28.75 +                     hrrs->strong_code_roots_list_length()));
   28.76        return false;
   28.77      }
   28.78  
    29.1 --- a/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp	Wed Nov 20 11:08:09 2013 -0800
    29.2 +++ b/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp	Thu Nov 21 12:30:35 2013 -0800
    29.3 @@ -313,27 +313,38 @@
    29.4    // for the first time during initialization.
    29.5    _reserve_regions = 0;
    29.6  
    29.7 -  initialize_all();
    29.8    _collectionSetChooser = new CollectionSetChooser();
    29.9 -  _young_gen_sizer = new G1YoungGenSizer(); // Must be after call to initialize_flags
   29.10 +}
   29.11 +
   29.12 +void G1CollectorPolicy::initialize_alignments() {
   29.13 +  _space_alignment = HeapRegion::GrainBytes;
   29.14 +  size_t card_table_alignment = GenRemSet::max_alignment_constraint(GenRemSet::CardTable);
   29.15 +  size_t page_size = UseLargePages ? os::large_page_size() : os::vm_page_size();
   29.16 +  _heap_alignment = MAX3(card_table_alignment, _space_alignment, page_size);
   29.17  }
   29.18  
   29.19  void G1CollectorPolicy::initialize_flags() {
   29.20 -  _min_alignment = HeapRegion::GrainBytes;
   29.21 -  size_t card_table_alignment = GenRemSet::max_alignment_constraint(rem_set_name());
   29.22 -  size_t page_size = UseLargePages ? os::large_page_size() : os::vm_page_size();
   29.23 -  _max_alignment = MAX3(card_table_alignment, _min_alignment, page_size);
   29.24 +  if (G1HeapRegionSize != HeapRegion::GrainBytes) {
   29.25 +    FLAG_SET_ERGO(uintx, G1HeapRegionSize, HeapRegion::GrainBytes);
   29.26 +  }
   29.27 +
   29.28    if (SurvivorRatio < 1) {
   29.29      vm_exit_during_initialization("Invalid survivor ratio specified");
   29.30    }
   29.31    CollectorPolicy::initialize_flags();
   29.32 +  _young_gen_sizer = new G1YoungGenSizer(); // Must be after call to initialize_flags
   29.33  }
   29.34  
   29.35 -G1YoungGenSizer::G1YoungGenSizer() : _sizer_kind(SizerDefaults), _adaptive_size(true) {
   29.36 -  assert(G1NewSizePercent <= G1MaxNewSizePercent, "Min larger than max");
   29.37 -  assert(G1NewSizePercent > 0 && G1NewSizePercent < 100, "Min out of bounds");
   29.38 -  assert(G1MaxNewSizePercent > 0 && G1MaxNewSizePercent < 100, "Max out of bounds");
   29.39 +void G1CollectorPolicy::post_heap_initialize() {
   29.40 +  uintx max_regions = G1CollectedHeap::heap()->max_regions();
   29.41 +  size_t max_young_size = (size_t)_young_gen_sizer->max_young_length(max_regions) * HeapRegion::GrainBytes;
   29.42 +  if (max_young_size != MaxNewSize) {
   29.43 +    FLAG_SET_ERGO(uintx, MaxNewSize, max_young_size);
   29.44 +  }
   29.45 +}
   29.46  
   29.47 +G1YoungGenSizer::G1YoungGenSizer() : _sizer_kind(SizerDefaults), _adaptive_size(true),
   29.48 +        _min_desired_young_length(0), _max_desired_young_length(0) {
   29.49    if (FLAG_IS_CMDLINE(NewRatio)) {
   29.50      if (FLAG_IS_CMDLINE(NewSize) || FLAG_IS_CMDLINE(MaxNewSize)) {
   29.51        warning("-XX:NewSize and -XX:MaxNewSize override -XX:NewRatio");
   29.52 @@ -344,8 +355,13 @@
   29.53      }
   29.54    }
   29.55  
   29.56 -  if (FLAG_IS_CMDLINE(NewSize) && FLAG_IS_CMDLINE(MaxNewSize) && NewSize > MaxNewSize) {
   29.57 -    vm_exit_during_initialization("Initial young gen size set larger than the maximum young gen size");
   29.58 +  if (NewSize > MaxNewSize) {
   29.59 +    if (FLAG_IS_CMDLINE(MaxNewSize)) {
   29.60 +      warning("NewSize (" SIZE_FORMAT "k) is greater than the MaxNewSize (" SIZE_FORMAT "k). "
   29.61 +              "A new max generation size of " SIZE_FORMAT "k will be used.",
   29.62 +              NewSize/K, MaxNewSize/K, NewSize/K);
   29.63 +    }
   29.64 +    MaxNewSize = NewSize;
   29.65    }
   29.66  
   29.67    if (FLAG_IS_CMDLINE(NewSize)) {
   29.68 @@ -378,34 +394,48 @@
   29.69    return MAX2(1U, default_value);
   29.70  }
   29.71  
   29.72 -void G1YoungGenSizer::heap_size_changed(uint new_number_of_heap_regions) {
   29.73 -  assert(new_number_of_heap_regions > 0, "Heap must be initialized");
   29.74 +void G1YoungGenSizer::recalculate_min_max_young_length(uint number_of_heap_regions, uint* min_young_length, uint* max_young_length) {
   29.75 +  assert(number_of_heap_regions > 0, "Heap must be initialized");
   29.76  
   29.77    switch (_sizer_kind) {
   29.78      case SizerDefaults:
   29.79 -      _min_desired_young_length = calculate_default_min_length(new_number_of_heap_regions);
   29.80 -      _max_desired_young_length = calculate_default_max_length(new_number_of_heap_regions);
   29.81 +      *min_young_length = calculate_default_min_length(number_of_heap_regions);
   29.82 +      *max_young_length = calculate_default_max_length(number_of_heap_regions);
   29.83        break;
   29.84      case SizerNewSizeOnly:
   29.85 -      _max_desired_young_length = calculate_default_max_length(new_number_of_heap_regions);
   29.86 -      _max_desired_young_length = MAX2(_min_desired_young_length, _max_desired_young_length);
   29.87 +      *max_young_length = calculate_default_max_length(number_of_heap_regions);
   29.88 +      *max_young_length = MAX2(*min_young_length, *max_young_length);
   29.89        break;
   29.90      case SizerMaxNewSizeOnly:
   29.91 -      _min_desired_young_length = calculate_default_min_length(new_number_of_heap_regions);
   29.92 -      _min_desired_young_length = MIN2(_min_desired_young_length, _max_desired_young_length);
   29.93 +      *min_young_length = calculate_default_min_length(number_of_heap_regions);
   29.94 +      *min_young_length = MIN2(*min_young_length, *max_young_length);
   29.95        break;
   29.96      case SizerMaxAndNewSize:
   29.97        // Do nothing. Values set on the command line, don't update them at runtime.
   29.98        break;
   29.99      case SizerNewRatio:
  29.100 -      _min_desired_young_length = new_number_of_heap_regions / (NewRatio + 1);
  29.101 -      _max_desired_young_length = _min_desired_young_length;
  29.102 +      *min_young_length = number_of_heap_regions / (NewRatio + 1);
  29.103 +      *max_young_length = *min_young_length;
  29.104        break;
  29.105      default:
  29.106        ShouldNotReachHere();
  29.107    }
  29.108  
  29.109 -  assert(_min_desired_young_length <= _max_desired_young_length, "Invalid min/max young gen size values");
  29.110 +  assert(*min_young_length <= *max_young_length, "Invalid min/max young gen size values");
  29.111 +}
  29.112 +
  29.113 +uint G1YoungGenSizer::max_young_length(uint number_of_heap_regions) {
  29.114 +  // We need to pass the desired values because recalculation may not update these
  29.115 +  // values in some cases.
  29.116 +  uint temp = _min_desired_young_length;
  29.117 +  uint result = _max_desired_young_length;
  29.118 +  recalculate_min_max_young_length(number_of_heap_regions, &temp, &result);
  29.119 +  return result;
  29.120 +}
  29.121 +
  29.122 +void G1YoungGenSizer::heap_size_changed(uint new_number_of_heap_regions) {
  29.123 +  recalculate_min_max_young_length(new_number_of_heap_regions, &_min_desired_young_length,
  29.124 +          &_max_desired_young_length);
  29.125  }
  29.126  
  29.127  void G1CollectorPolicy::init() {
    30.1 --- a/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp	Wed Nov 20 11:08:09 2013 -0800
    30.2 +++ b/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp	Thu Nov 21 12:30:35 2013 -0800
    30.3 @@ -136,8 +136,16 @@
    30.4    uint calculate_default_min_length(uint new_number_of_heap_regions);
    30.5    uint calculate_default_max_length(uint new_number_of_heap_regions);
    30.6  
    30.7 +  // Update the given values for minimum and maximum young gen length in regions
    30.8 +  // given the number of heap regions depending on the kind of sizing algorithm.
    30.9 +  void recalculate_min_max_young_length(uint number_of_heap_regions, uint* min_young_length, uint* max_young_length);
   30.10 +
   30.11  public:
   30.12    G1YoungGenSizer();
   30.13 +  // Calculate the maximum length of the young gen given the number of regions
   30.14 +  // depending on the sizing algorithm.
   30.15 +  uint max_young_length(uint number_of_heap_regions);
   30.16 +
   30.17    void heap_size_changed(uint new_number_of_heap_regions);
   30.18    uint min_desired_young_length() {
   30.19      return _min_desired_young_length;
   30.20 @@ -165,13 +173,9 @@
   30.21  
   30.22    G1MMUTracker* _mmu_tracker;
   30.23  
   30.24 +  void initialize_alignments();
   30.25    void initialize_flags();
   30.26  
   30.27 -  void initialize_all() {
   30.28 -    initialize_flags();
   30.29 -    initialize_size_info();
   30.30 -  }
   30.31 -
   30.32    CollectionSetChooser* _collectionSetChooser;
   30.33  
   30.34    double _full_collection_start_sec;
   30.35 @@ -217,7 +221,6 @@
   30.36      return _during_marking;
   30.37    }
   30.38  
   30.39 -private:
   30.40    enum PredictionConstants {
   30.41      TruncatedSeqLength = 10
   30.42    };
   30.43 @@ -665,8 +668,6 @@
   30.44  
   30.45    BarrierSet::Name barrier_set_name() { return BarrierSet::G1SATBCTLogging; }
   30.46  
   30.47 -  GenRemSet::Name  rem_set_name()     { return GenRemSet::CardTable; }
   30.48 -
   30.49    bool need_to_start_conc_mark(const char* source, size_t alloc_word_size = 0);
   30.50  
   30.51    // Record the start and end of an evacuation pause.
   30.52 @@ -934,6 +935,7 @@
   30.53    // Calculates survivor space parameters.
   30.54    void update_survivors_policy();
   30.55  
   30.56 +  virtual void post_heap_initialize();
   30.57  };
   30.58  
   30.59  // This should move to some place more general...
    31.1 --- a/src/share/vm/gc_implementation/g1/g1RemSet.cpp	Wed Nov 20 11:08:09 2013 -0800
    31.2 +++ b/src/share/vm/gc_implementation/g1/g1RemSet.cpp	Thu Nov 21 12:30:35 2013 -0800
    31.3 @@ -377,11 +377,6 @@
    31.4    DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
    31.5    dcqs.concatenate_logs();
    31.6  
    31.7 -  if (G1CollectedHeap::use_parallel_gc_threads()) {
    31.8 -    // Don't set the number of workers here.  It will be set
    31.9 -    // when the task is run
   31.10 -    // _seq_task->set_n_termination((int)n_workers());
   31.11 -  }
   31.12    guarantee( _cards_scanned == NULL, "invariant" );
   31.13    _cards_scanned = NEW_C_HEAP_ARRAY(size_t, n_workers(), mtGC);
   31.14    for (uint i = 0; i < n_workers(); ++i) {
    32.1 --- a/src/share/vm/gc_implementation/g1/heapRegion.cpp	Wed Nov 20 11:08:09 2013 -0800
    32.2 +++ b/src/share/vm/gc_implementation/g1/heapRegion.cpp	Thu Nov 21 12:30:35 2013 -0800
    32.3 @@ -174,11 +174,6 @@
    32.4      region_size = MAX_REGION_SIZE;
    32.5    }
    32.6  
    32.7 -  if (region_size != G1HeapRegionSize) {
    32.8 -    // Update the flag to make sure that PrintFlagsFinal logs the correct value
    32.9 -    FLAG_SET_ERGO(uintx, G1HeapRegionSize, region_size);
   32.10 -  }
   32.11 -
   32.12    // And recalculate the log.
   32.13    region_size_log = log2_long((jlong) region_size);
   32.14  
   32.15 @@ -606,7 +601,9 @@
   32.16  
   32.17  void HeapRegion::migrate_strong_code_roots() {
   32.18    assert(in_collection_set(), "only collection set regions");
   32.19 -  assert(!isHumongous(), "not humongous regions");
   32.20 +  assert(!isHumongous(),
   32.21 +          err_msg("humongous region "HR_FORMAT" should not have been added to collection set",
   32.22 +                  HR_FORMAT_PARAMS(this)));
   32.23  
   32.24    HeapRegionRemSet* hrrs = rem_set();
   32.25    hrrs->migrate_strong_code_roots();
   32.26 @@ -727,12 +724,11 @@
   32.27      return;
   32.28    }
   32.29  
   32.30 -  // An H-region should have an empty strong code root list
   32.31 -  if (isHumongous()) {
   32.32 +  if (continuesHumongous()) {
   32.33      if (strong_code_roots_length > 0) {
   32.34 -      gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] is humongous "
   32.35 -                             "but has "INT32_FORMAT" code root entries",
   32.36 -                             bottom(), end(), strong_code_roots_length);
   32.37 +      gclog_or_tty->print_cr("region "HR_FORMAT" is a continuation of a humongous "
   32.38 +                             "region but has "INT32_FORMAT" code root entries",
   32.39 +                             HR_FORMAT_PARAMS(this), strong_code_roots_length);
   32.40        *failures = true;
   32.41      }
   32.42      return;
    33.1 --- a/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp	Wed Nov 20 11:08:09 2013 -0800
    33.2 +++ b/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp	Thu Nov 21 12:30:35 2013 -0800
    33.3 @@ -1004,7 +1004,9 @@
    33.4  
    33.5  void HeapRegionRemSet::migrate_strong_code_roots() {
    33.6    assert(hr()->in_collection_set(), "only collection set regions");
    33.7 -  assert(!hr()->isHumongous(), "not humongous regions");
    33.8 +  assert(!hr()->isHumongous(),
    33.9 +         err_msg("humongous region "HR_FORMAT" should not have been added to the collection set",
   33.10 +                 HR_FORMAT_PARAMS(hr())));
   33.11  
   33.12    ResourceMark rm;
   33.13  
    34.1 --- a/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp	Wed Nov 20 11:08:09 2013 -0800
    34.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp	Thu Nov 21 12:30:35 2013 -0800
    34.3 @@ -25,6 +25,7 @@
    34.4  #include "precompiled.hpp"
    34.5  #include "gc_implementation/parallelScavenge/adjoiningGenerations.hpp"
    34.6  #include "gc_implementation/parallelScavenge/adjoiningVirtualSpaces.hpp"
    34.7 +#include "gc_implementation/parallelScavenge/generationSizer.hpp"
    34.8  #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp"
    34.9  
   34.10  // If boundary moving is being used, create the young gen and old
   34.11 @@ -32,15 +33,17 @@
   34.12  // the old behavior otherwise (with PSYoungGen and PSOldGen).
   34.13  
   34.14  AdjoiningGenerations::AdjoiningGenerations(ReservedSpace old_young_rs,
   34.15 -                                           size_t init_low_byte_size,
   34.16 -                                           size_t min_low_byte_size,
   34.17 -                                           size_t max_low_byte_size,
   34.18 -                                           size_t init_high_byte_size,
   34.19 -                                           size_t min_high_byte_size,
   34.20 -                                           size_t max_high_byte_size,
   34.21 +                                           GenerationSizer* policy,
   34.22                                             size_t alignment) :
   34.23 -  _virtual_spaces(old_young_rs, min_low_byte_size,
   34.24 -                  min_high_byte_size, alignment) {
   34.25 +  _virtual_spaces(old_young_rs, policy->min_gen1_size(),
   34.26 +                  policy->min_gen0_size(), alignment) {
   34.27 +  size_t init_low_byte_size = policy->initial_gen1_size();
   34.28 +  size_t min_low_byte_size = policy->min_gen1_size();
   34.29 +  size_t max_low_byte_size = policy->max_gen1_size();
   34.30 +  size_t init_high_byte_size = policy->initial_gen0_size();
   34.31 +  size_t min_high_byte_size = policy->min_gen0_size();
   34.32 +  size_t max_high_byte_size = policy->max_gen0_size();
   34.33 +
   34.34    assert(min_low_byte_size <= init_low_byte_size &&
   34.35           init_low_byte_size <= max_low_byte_size, "Parameter check");
   34.36    assert(min_high_byte_size <= init_high_byte_size &&
    35.1 --- a/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp	Wed Nov 20 11:08:09 2013 -0800
    35.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp	Thu Nov 21 12:30:35 2013 -0800
    35.3 @@ -28,6 +28,7 @@
    35.4  #include "gc_implementation/parallelScavenge/adjoiningVirtualSpaces.hpp"
    35.5  #include "gc_implementation/parallelScavenge/asPSOldGen.hpp"
    35.6  #include "gc_implementation/parallelScavenge/asPSYoungGen.hpp"
    35.7 +#include "gc_implementation/parallelScavenge/generationSizer.hpp"
    35.8  
    35.9  
   35.10  // Contains two generations that both use an AdjoiningVirtualSpaces.
   35.11 @@ -56,14 +57,7 @@
   35.12    bool request_young_gen_expansion(size_t desired_change_in_bytes);
   35.13  
   35.14   public:
   35.15 -  AdjoiningGenerations(ReservedSpace rs,
   35.16 -                       size_t init_low_byte_size,
   35.17 -                       size_t min_low_byte_size,
   35.18 -                       size_t max_low_byte_size,
   35.19 -                       size_t init_high_byte_size,
   35.20 -                       size_t min_high_byte_size,
   35.21 -                       size_t max_high_bytes_size,
   35.22 -                       size_t alignment);
   35.23 +  AdjoiningGenerations(ReservedSpace rs, GenerationSizer* policy, size_t alignment);
   35.24  
   35.25    // Accessors
   35.26    PSYoungGen* young_gen() { return _young_gen; }
    36.1 --- a/src/share/vm/gc_implementation/parallelScavenge/asPSOldGen.cpp	Wed Nov 20 11:08:09 2013 -0800
    36.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/asPSOldGen.cpp	Thu Nov 21 12:30:35 2013 -0800
    36.3 @@ -54,7 +54,6 @@
    36.4                         int level) :
    36.5    PSOldGen(initial_size, min_size, size_limit, gen_name, level),
    36.6    _gen_size_limit(size_limit)
    36.7 -
    36.8  {}
    36.9  
   36.10  ASPSOldGen::ASPSOldGen(PSVirtualSpace* vs,
   36.11 @@ -65,13 +64,11 @@
   36.12                         int level) :
   36.13    PSOldGen(initial_size, min_size, size_limit, gen_name, level),
   36.14    _gen_size_limit(size_limit)
   36.15 -
   36.16  {
   36.17    _virtual_space = vs;
   36.18  }
   36.19  
   36.20  void ASPSOldGen::initialize_work(const char* perf_data_name, int level) {
   36.21 -
   36.22    PSOldGen::initialize_work(perf_data_name, level);
   36.23  
   36.24    // The old gen can grow to gen_size_limit().  _reserve reflects only
   36.25 @@ -94,7 +91,7 @@
   36.26  
   36.27    ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
   36.28    size_t result =  gen_size_limit() - virtual_space()->committed_size();
   36.29 -  size_t result_aligned = align_size_down(result, heap->old_gen_alignment());
   36.30 +  size_t result_aligned = align_size_down(result, heap->generation_alignment());
   36.31    return result_aligned;
   36.32  }
   36.33  
   36.34 @@ -105,7 +102,7 @@
   36.35    }
   36.36  
   36.37    ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
   36.38 -  const size_t gen_alignment = heap->old_gen_alignment();
   36.39 +  const size_t gen_alignment = heap->generation_alignment();
   36.40    PSAdaptiveSizePolicy* policy = heap->size_policy();
   36.41    const size_t working_size =
   36.42      used_in_bytes() + (size_t) policy->avg_promoted()->padded_average();
    37.1 --- a/src/share/vm/gc_implementation/parallelScavenge/asPSYoungGen.cpp	Wed Nov 20 11:08:09 2013 -0800
    37.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/asPSYoungGen.cpp	Thu Nov 21 12:30:35 2013 -0800
    37.3 @@ -70,13 +70,12 @@
    37.4  }
    37.5  
    37.6  size_t ASPSYoungGen::available_for_expansion() {
    37.7 -
    37.8    size_t current_committed_size = virtual_space()->committed_size();
    37.9    assert((gen_size_limit() >= current_committed_size),
   37.10      "generation size limit is wrong");
   37.11    ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
   37.12    size_t result =  gen_size_limit() - current_committed_size;
   37.13 -  size_t result_aligned = align_size_down(result, heap->young_gen_alignment());
   37.14 +  size_t result_aligned = align_size_down(result, heap->generation_alignment());
   37.15    return result_aligned;
   37.16  }
   37.17  
   37.18 @@ -85,7 +84,6 @@
   37.19  // Future implementations could check the survivors and if to_space is in the
   37.20  // right place (below from_space), take a chunk from to_space.
   37.21  size_t ASPSYoungGen::available_for_contraction() {
   37.22 -
   37.23    size_t uncommitted_bytes = virtual_space()->uncommitted_size();
   37.24    if (uncommitted_bytes != 0) {
   37.25      return uncommitted_bytes;
   37.26 @@ -94,8 +92,8 @@
   37.27    if (eden_space()->is_empty()) {
   37.28      // Respect the minimum size for eden and for the young gen as a whole.
   37.29      ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
   37.30 -    const size_t eden_alignment = heap->intra_heap_alignment();
   37.31 -    const size_t gen_alignment = heap->young_gen_alignment();
   37.32 +    const size_t eden_alignment = heap->space_alignment();
   37.33 +    const size_t gen_alignment = heap->generation_alignment();
   37.34  
   37.35      assert(eden_space()->capacity_in_bytes() >= eden_alignment,
   37.36        "Alignment is wrong");
   37.37 @@ -121,7 +119,6 @@
   37.38        gclog_or_tty->print_cr("  gen_avail %d K", gen_avail/K);
   37.39      }
   37.40      return result_aligned;
   37.41 -
   37.42    }
   37.43  
   37.44    return 0;
   37.45 @@ -132,7 +129,7 @@
   37.46  // to_space can be.
   37.47  size_t ASPSYoungGen::available_to_live() {
   37.48    ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
   37.49 -  const size_t alignment = heap->intra_heap_alignment();
   37.50 +  const size_t alignment = heap->space_alignment();
   37.51  
   37.52    // Include any space that is committed but is not in eden.
   37.53    size_t available = pointer_delta(eden_space()->bottom(),
   37.54 @@ -296,7 +293,7 @@
   37.55    assert(eden_start < from_start, "Cannot push into from_space");
   37.56  
   37.57    ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
   37.58 -  const size_t alignment = heap->intra_heap_alignment();
   37.59 +  const size_t alignment = heap->space_alignment();
   37.60    const bool maintain_minimum =
   37.61      (requested_eden_size + 2 * requested_survivor_size) <= min_gen_size();
   37.62  
    38.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    38.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/generationSizer.cpp	Thu Nov 21 12:30:35 2013 -0800
    38.3 @@ -0,0 +1,85 @@
    38.4 +/*
    38.5 + * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
    38.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    38.7 + *
    38.8 + * This code is free software; you can redistribute it and/or modify it
    38.9 + * under the terms of the GNU General Public License version 2 only, as
   38.10 + * published by the Free Software Foundation.
   38.11 + *
   38.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   38.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   38.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   38.15 + * version 2 for more details (a copy is included in the LICENSE file that
   38.16 + * accompanied this code).
   38.17 + *
   38.18 + * You should have received a copy of the GNU General Public License version
   38.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   38.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   38.21 + *
   38.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   38.23 + * or visit www.oracle.com if you need additional information or have any
   38.24 + * questions.
   38.25 + *
   38.26 + */
   38.27 +
   38.28 +#include "precompiled.hpp"
   38.29 +#include "gc_implementation/parallelScavenge/generationSizer.hpp"
   38.30 +#include "memory/collectorPolicy.hpp"
   38.31 +
   38.32 +void GenerationSizer::trace_gen_sizes(const char* const str) {
   38.33 +  if (TracePageSizes) {
   38.34 +    tty->print_cr("%s:  " SIZE_FORMAT "," SIZE_FORMAT " "
   38.35 +                  SIZE_FORMAT "," SIZE_FORMAT " "
   38.36 +                  SIZE_FORMAT,
   38.37 +                  str,
   38.38 +                  _min_gen1_size / K, _max_gen1_size / K,
   38.39 +                  _min_gen0_size / K, _max_gen0_size / K,
   38.40 +                  _max_heap_byte_size / K);
   38.41 +  }
   38.42 +}
   38.43 +
   38.44 +void GenerationSizer::initialize_alignments() {
   38.45 +  _space_alignment = _gen_alignment = default_gen_alignment();
   38.46 +  _heap_alignment = compute_heap_alignment();
   38.47 +}
   38.48 +
   38.49 +void GenerationSizer::initialize_flags() {
   38.50 +  // Do basic sizing work
   38.51 +  TwoGenerationCollectorPolicy::initialize_flags();
   38.52 +
   38.53 +  assert(UseSerialGC ||
   38.54 +          !FLAG_IS_DEFAULT(ParallelGCThreads) ||
   38.55 +          (ParallelGCThreads > 0),
   38.56 +         "ParallelGCThreads should be set before flag initialization");
   38.57 +
   38.58 +  // The survivor ratio's are calculated "raw", unlike the
   38.59 +  // default gc, which adds 2 to the ratio value. We need to
   38.60 +  // make sure the values are valid before using them.
   38.61 +  if (MinSurvivorRatio < 3) {
   38.62 +    FLAG_SET_ERGO(uintx, MinSurvivorRatio, 3);
   38.63 +  }
   38.64 +
   38.65 +  if (InitialSurvivorRatio < 3) {
   38.66 +    FLAG_SET_ERGO(uintx, InitialSurvivorRatio, 3);
   38.67 +  }
   38.68 +}
   38.69 +
   38.70 +void GenerationSizer::initialize_size_info() {
   38.71 +  trace_gen_sizes("ps heap raw");
   38.72 +  const size_t page_sz = os::page_size_for_region(_min_heap_byte_size,
   38.73 +                                                  _max_heap_byte_size,
   38.74 +                                                  8);
   38.75 +
   38.76 +  // Can a page size be something else than a power of two?
   38.77 +  assert(is_power_of_2((intptr_t)page_sz), "must be a power of 2");
   38.78 +  size_t new_alignment = round_to(page_sz, _gen_alignment);
   38.79 +  if (new_alignment != _gen_alignment) {
   38.80 +    _gen_alignment = new_alignment;
   38.81 +    _space_alignment = new_alignment;
   38.82 +    // Redo everything from the start
   38.83 +    initialize_flags();
   38.84 +  }
   38.85 +  TwoGenerationCollectorPolicy::initialize_size_info();
   38.86 +
   38.87 +  trace_gen_sizes("ps heap rnd");
   38.88 +}
    39.1 --- a/src/share/vm/gc_implementation/parallelScavenge/generationSizer.hpp	Wed Nov 20 11:08:09 2013 -0800
    39.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/generationSizer.hpp	Thu Nov 21 12:30:35 2013 -0800
    39.3 @@ -31,41 +31,17 @@
    39.4  // TwoGenerationCollectorPolicy. Lets reuse it!
    39.5  
    39.6  class GenerationSizer : public TwoGenerationCollectorPolicy {
    39.7 - public:
    39.8 -  GenerationSizer() {
    39.9 -    // Partial init only!
   39.10 -    initialize_flags();
   39.11 -    initialize_size_info();
   39.12 -  }
   39.13 + private:
   39.14  
   39.15 -  void initialize_flags() {
   39.16 -    // Do basic sizing work
   39.17 -    TwoGenerationCollectorPolicy::initialize_flags();
   39.18 +  void trace_gen_sizes(const char* const str);
   39.19  
   39.20 -    assert(UseSerialGC ||
   39.21 -           !FLAG_IS_DEFAULT(ParallelGCThreads) ||
   39.22 -           (ParallelGCThreads > 0),
   39.23 -           "ParallelGCThreads should be set before flag initialization");
   39.24 +  // The alignment used for boundary between young gen and old gen
   39.25 +  static size_t default_gen_alignment() { return 64 * K * HeapWordSize; }
   39.26  
   39.27 -    // The survivor ratio's are calculated "raw", unlike the
   39.28 -    // default gc, which adds 2 to the ratio value. We need to
   39.29 -    // make sure the values are valid before using them.
   39.30 -    if (MinSurvivorRatio < 3) {
   39.31 -      MinSurvivorRatio = 3;
   39.32 -    }
   39.33 + protected:
   39.34  
   39.35 -    if (InitialSurvivorRatio < 3) {
   39.36 -      InitialSurvivorRatio = 3;
   39.37 -    }
   39.38 -  }
   39.39 -
   39.40 -  size_t min_young_gen_size() { return _min_gen0_size; }
   39.41 -  size_t young_gen_size()     { return _initial_gen0_size; }
   39.42 -  size_t max_young_gen_size() { return _max_gen0_size; }
   39.43 -
   39.44 -  size_t min_old_gen_size()   { return _min_gen1_size; }
   39.45 -  size_t old_gen_size()       { return _initial_gen1_size; }
   39.46 -  size_t max_old_gen_size()   { return _max_gen1_size; }
   39.47 +  void initialize_alignments();
   39.48 +  void initialize_flags();
   39.49 +  void initialize_size_info();
   39.50  };
   39.51 -
   39.52  #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_GENERATIONSIZER_HPP
    40.1 --- a/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp	Wed Nov 20 11:08:09 2013 -0800
    40.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp	Thu Nov 21 12:30:35 2013 -0800
    40.3 @@ -52,76 +52,20 @@
    40.4  ParallelScavengeHeap* ParallelScavengeHeap::_psh = NULL;
    40.5  GCTaskManager* ParallelScavengeHeap::_gc_task_manager = NULL;
    40.6  
    40.7 -static void trace_gen_sizes(const char* const str,
    40.8 -                            size_t og_min, size_t og_max,
    40.9 -                            size_t yg_min, size_t yg_max)
   40.10 -{
   40.11 -  if (TracePageSizes) {
   40.12 -    tty->print_cr("%s:  " SIZE_FORMAT "," SIZE_FORMAT " "
   40.13 -                  SIZE_FORMAT "," SIZE_FORMAT " "
   40.14 -                  SIZE_FORMAT,
   40.15 -                  str,
   40.16 -                  og_min / K, og_max / K,
   40.17 -                  yg_min / K, yg_max / K,
   40.18 -                  (og_max + yg_max) / K);
   40.19 -  }
   40.20 -}
   40.21 -
   40.22  jint ParallelScavengeHeap::initialize() {
   40.23    CollectedHeap::pre_initialize();
   40.24  
   40.25 -  // Cannot be initialized until after the flags are parsed
   40.26 -  // GenerationSizer flag_parser;
   40.27 +  // Initialize collector policy
   40.28    _collector_policy = new GenerationSizer();
   40.29 +  _collector_policy->initialize_all();
   40.30  
   40.31 -  size_t yg_min_size = _collector_policy->min_young_gen_size();
   40.32 -  size_t yg_max_size = _collector_policy->max_young_gen_size();
   40.33 -  size_t og_min_size = _collector_policy->min_old_gen_size();
   40.34 -  size_t og_max_size = _collector_policy->max_old_gen_size();
   40.35 +  const size_t heap_size = _collector_policy->max_heap_byte_size();
   40.36  
   40.37 -  trace_gen_sizes("ps heap raw",
   40.38 -                  og_min_size, og_max_size,
   40.39 -                  yg_min_size, yg_max_size);
   40.40 -
   40.41 -  const size_t og_page_sz = os::page_size_for_region(yg_min_size + og_min_size,
   40.42 -                                                     yg_max_size + og_max_size,
   40.43 -                                                     8);
   40.44 -
   40.45 -  const size_t og_align = set_alignment(_old_gen_alignment,   og_page_sz);
   40.46 -  const size_t yg_align = set_alignment(_young_gen_alignment, og_page_sz);
   40.47 -
   40.48 -  // Update sizes to reflect the selected page size(s).
   40.49 -  //
   40.50 -  // NEEDS_CLEANUP.  The default TwoGenerationCollectorPolicy uses NewRatio; it
   40.51 -  // should check UseAdaptiveSizePolicy.  Changes from generationSizer could
   40.52 -  // move to the common code.
   40.53 -  yg_min_size = align_size_up(yg_min_size, yg_align);
   40.54 -  yg_max_size = align_size_up(yg_max_size, yg_align);
   40.55 -  size_t yg_cur_size =
   40.56 -    align_size_up(_collector_policy->young_gen_size(), yg_align);
   40.57 -  yg_cur_size = MAX2(yg_cur_size, yg_min_size);
   40.58 -
   40.59 -  og_min_size = align_size_up(og_min_size, og_align);
   40.60 -  // Align old gen size down to preserve specified heap size.
   40.61 -  assert(og_align == yg_align, "sanity");
   40.62 -  og_max_size = align_size_down(og_max_size, og_align);
   40.63 -  og_max_size = MAX2(og_max_size, og_min_size);
   40.64 -  size_t og_cur_size =
   40.65 -    align_size_down(_collector_policy->old_gen_size(), og_align);
   40.66 -  og_cur_size = MAX2(og_cur_size, og_min_size);
   40.67 -
   40.68 -  trace_gen_sizes("ps heap rnd",
   40.69 -                  og_min_size, og_max_size,
   40.70 -                  yg_min_size, yg_max_size);
   40.71 -
   40.72 -  const size_t heap_size = og_max_size + yg_max_size;
   40.73 -
   40.74 -  ReservedSpace heap_rs = Universe::reserve_heap(heap_size, og_align);
   40.75 -
   40.76 +  ReservedSpace heap_rs = Universe::reserve_heap(heap_size, _collector_policy->heap_alignment());
   40.77    MemTracker::record_virtual_memory_type((address)heap_rs.base(), mtJavaHeap);
   40.78  
   40.79 -  os::trace_page_sizes("ps main", og_min_size + yg_min_size,
   40.80 -                       og_max_size + yg_max_size, og_page_sz,
   40.81 +  os::trace_page_sizes("ps main", _collector_policy->min_heap_byte_size(),
   40.82 +                       heap_size, generation_alignment(),
   40.83                         heap_rs.base(),
   40.84                         heap_rs.size());
   40.85    if (!heap_rs.is_reserved()) {
   40.86 @@ -142,12 +86,6 @@
   40.87      return JNI_ENOMEM;
   40.88    }
   40.89  
   40.90 -  // Initial young gen size is 4 Mb
   40.91 -  //
   40.92 -  // XXX - what about flag_parser.young_gen_size()?
   40.93 -  const size_t init_young_size = align_size_up(4 * M, yg_align);
   40.94 -  yg_cur_size = MAX2(MIN2(init_young_size, yg_max_size), yg_cur_size);
   40.95 -
   40.96    // Make up the generations
   40.97    // Calculate the maximum size that a generation can grow.  This
   40.98    // includes growth into the other generation.  Note that the
   40.99 @@ -157,14 +95,7 @@
  40.100    double max_gc_pause_sec = ((double) MaxGCPauseMillis)/1000.0;
  40.101    double max_gc_minor_pause_sec = ((double) MaxGCMinorPauseMillis)/1000.0;
  40.102  
  40.103 -  _gens = new AdjoiningGenerations(heap_rs,
  40.104 -                                   og_cur_size,
  40.105 -                                   og_min_size,
  40.106 -                                   og_max_size,
  40.107 -                                   yg_cur_size,
  40.108 -                                   yg_min_size,
  40.109 -                                   yg_max_size,
  40.110 -                                   yg_align);
  40.111 +  _gens = new AdjoiningGenerations(heap_rs, _collector_policy, generation_alignment());
  40.112  
  40.113    _old_gen = _gens->old_gen();
  40.114    _young_gen = _gens->young_gen();
  40.115 @@ -176,7 +107,7 @@
  40.116      new PSAdaptiveSizePolicy(eden_capacity,
  40.117                               initial_promo_size,
  40.118                               young_gen()->to_space()->capacity_in_bytes(),
  40.119 -                             intra_heap_alignment(),
  40.120 +                             _collector_policy->gen_alignment(),
  40.121                               max_gc_pause_sec,
  40.122                               max_gc_minor_pause_sec,
  40.123                               GCTimeRatio
    41.1 --- a/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp	Wed Nov 20 11:08:09 2013 -0800
    41.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp	Thu Nov 21 12:30:35 2013 -0800
    41.3 @@ -25,6 +25,7 @@
    41.4  #ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARALLELSCAVENGEHEAP_HPP
    41.5  #define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARALLELSCAVENGEHEAP_HPP
    41.6  
    41.7 +#include "gc_implementation/parallelScavenge/generationSizer.hpp"
    41.8  #include "gc_implementation/parallelScavenge/objectStartArray.hpp"
    41.9  #include "gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp"
   41.10  #include "gc_implementation/parallelScavenge/psOldGen.hpp"
   41.11 @@ -32,14 +33,12 @@
   41.12  #include "gc_implementation/shared/gcPolicyCounters.hpp"
   41.13  #include "gc_implementation/shared/gcWhen.hpp"
   41.14  #include "gc_interface/collectedHeap.inline.hpp"
   41.15 +#include "memory/collectorPolicy.hpp"
   41.16  #include "utilities/ostream.hpp"
   41.17  
   41.18  class AdjoiningGenerations;
   41.19 -class CollectorPolicy;
   41.20  class GCHeapSummary;
   41.21  class GCTaskManager;
   41.22 -class GenerationSizer;
   41.23 -class CollectorPolicy;
   41.24  class PSAdaptiveSizePolicy;
   41.25  class PSHeapSummary;
   41.26  
   41.27 @@ -50,24 +49,20 @@
   41.28    static PSOldGen*   _old_gen;
   41.29  
   41.30    // Sizing policy for entire heap
   41.31 -  static PSAdaptiveSizePolicy* _size_policy;
   41.32 -  static PSGCAdaptivePolicyCounters*   _gc_policy_counters;
   41.33 +  static PSAdaptiveSizePolicy*       _size_policy;
   41.34 +  static PSGCAdaptivePolicyCounters* _gc_policy_counters;
   41.35  
   41.36    static ParallelScavengeHeap* _psh;
   41.37  
   41.38 -  size_t _young_gen_alignment;
   41.39 -  size_t _old_gen_alignment;
   41.40 -
   41.41    GenerationSizer* _collector_policy;
   41.42  
   41.43 -  inline size_t set_alignment(size_t& var, size_t val);
   41.44 -
   41.45    // Collection of generations that are adjacent in the
   41.46    // space reserved for the heap.
   41.47    AdjoiningGenerations* _gens;
   41.48    unsigned int _death_march_count;
   41.49  
   41.50 -  static GCTaskManager*          _gc_task_manager;      // The task manager.
   41.51 +  // The task manager
   41.52 +  static GCTaskManager* _gc_task_manager;
   41.53  
   41.54    void trace_heap(GCWhen::Type when, GCTracer* tracer);
   41.55  
   41.56 @@ -80,16 +75,7 @@
   41.57    HeapWord* mem_allocate_old_gen(size_t size);
   41.58  
   41.59   public:
   41.60 -  ParallelScavengeHeap() : CollectedHeap() {
   41.61 -    _death_march_count = 0;
   41.62 -    set_alignment(_young_gen_alignment, intra_heap_alignment());
   41.63 -    set_alignment(_old_gen_alignment, intra_heap_alignment());
   41.64 -  }
   41.65 -
   41.66 -  // Return the (conservative) maximum heap alignment
   41.67 -  static size_t conservative_max_heap_alignment() {
   41.68 -    return intra_heap_alignment();
   41.69 -  }
   41.70 +  ParallelScavengeHeap() : CollectedHeap(), _death_march_count(0) { }
   41.71  
   41.72    // For use by VM operations
   41.73    enum CollectionType {
   41.74 @@ -103,8 +89,8 @@
   41.75  
   41.76    virtual CollectorPolicy* collector_policy() const { return (CollectorPolicy*) _collector_policy; }
   41.77  
   41.78 -  static PSYoungGen* young_gen()     { return _young_gen; }
   41.79 -  static PSOldGen* old_gen()         { return _old_gen; }
   41.80 +  static PSYoungGen* young_gen() { return _young_gen; }
   41.81 +  static PSOldGen* old_gen()     { return _old_gen; }
   41.82  
   41.83    virtual PSAdaptiveSizePolicy* size_policy() { return _size_policy; }
   41.84  
   41.85 @@ -121,13 +107,15 @@
   41.86  
   41.87    void post_initialize();
   41.88    void update_counters();
   41.89 -  // The alignment used for the various generations.
   41.90 -  size_t young_gen_alignment() const { return _young_gen_alignment; }
   41.91 -  size_t old_gen_alignment()  const { return _old_gen_alignment; }
   41.92  
   41.93 -  // The alignment used for eden and survivors within the young gen
   41.94 -  // and for boundary between young gen and old gen.
   41.95 -  static size_t intra_heap_alignment() { return 64 * K * HeapWordSize; }
   41.96 +  // The alignment used for the various areas
   41.97 +  size_t space_alignment()      { return _collector_policy->space_alignment(); }
   41.98 +  size_t generation_alignment() { return _collector_policy->gen_alignment(); }
   41.99 +
  41.100 +  // Return the (conservative) maximum heap alignment
  41.101 +  static size_t conservative_max_heap_alignment() {
  41.102 +    return CollectorPolicy::compute_heap_alignment();
  41.103 +  }
  41.104  
  41.105    size_t capacity() const;
  41.106    size_t used() const;
  41.107 @@ -157,16 +145,15 @@
  41.108    virtual bool is_in_partial_collection(const void *p);
  41.109  #endif
  41.110  
  41.111 -  bool is_in_young(oop p);        // reserved part
  41.112 -  bool is_in_old(oop p);          // reserved part
  41.113 +  bool is_in_young(oop p);  // reserved part
  41.114 +  bool is_in_old(oop p);    // reserved part
  41.115  
  41.116    // Memory allocation.   "gc_time_limit_was_exceeded" will
  41.117    // be set to true if the adaptive size policy determine that
  41.118    // an excessive amount of time is being spent doing collections
  41.119    // and caused a NULL to be returned.  If a NULL is not returned,
  41.120    // "gc_time_limit_was_exceeded" has an undefined meaning.
  41.121 -  HeapWord* mem_allocate(size_t size,
  41.122 -                         bool* gc_overhead_limit_was_exceeded);
  41.123 +  HeapWord* mem_allocate(size_t size, bool* gc_overhead_limit_was_exceeded);
  41.124  
  41.125    // Allocation attempt(s) during a safepoint. It should never be called
  41.126    // to allocate a new TLAB as this allocation might be satisfied out
  41.127 @@ -257,17 +244,10 @@
  41.128  
  41.129    // Call these in sequential code around the processing of strong roots.
  41.130    class ParStrongRootsScope : public MarkingCodeBlobClosure::MarkScope {
  41.131 -  public:
  41.132 +   public:
  41.133      ParStrongRootsScope();
  41.134      ~ParStrongRootsScope();
  41.135    };
  41.136  };
  41.137  
  41.138 -inline size_t ParallelScavengeHeap::set_alignment(size_t& var, size_t val)
  41.139 -{
  41.140 -  assert(is_power_of_2((intptr_t)val), "must be a power of 2");
  41.141 -  var = round_to(val, intra_heap_alignment());
  41.142 -  return var;
  41.143 -}
  41.144 -
  41.145  #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARALLELSCAVENGEHEAP_HPP
    42.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp	Wed Nov 20 11:08:09 2013 -0800
    42.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp	Thu Nov 21 12:30:35 2013 -0800
    42.3 @@ -37,7 +37,7 @@
    42.4  PSAdaptiveSizePolicy::PSAdaptiveSizePolicy(size_t init_eden_size,
    42.5                                             size_t init_promo_size,
    42.6                                             size_t init_survivor_size,
    42.7 -                                           size_t intra_generation_alignment,
    42.8 +                                           size_t space_alignment,
    42.9                                             double gc_pause_goal_sec,
   42.10                                             double gc_minor_pause_goal_sec,
   42.11                                             uint gc_cost_ratio) :
   42.12 @@ -46,9 +46,8 @@
   42.13                          init_survivor_size,
   42.14                          gc_pause_goal_sec,
   42.15                          gc_cost_ratio),
   42.16 -     _collection_cost_margin_fraction(AdaptiveSizePolicyCollectionCostMargin/
   42.17 -       100.0),
   42.18 -     _intra_generation_alignment(intra_generation_alignment),
   42.19 +     _collection_cost_margin_fraction(AdaptiveSizePolicyCollectionCostMargin / 100.0),
   42.20 +     _space_alignment(space_alignment),
   42.21       _live_at_last_full_gc(init_promo_size),
   42.22       _gc_minor_pause_goal_sec(gc_minor_pause_goal_sec),
   42.23       _latest_major_mutator_interval_seconds(0),
   42.24 @@ -353,11 +352,10 @@
   42.25    }
   42.26  
   42.27    // Align everything and make a final limit check
   42.28 -  const size_t alignment = _intra_generation_alignment;
   42.29 -  desired_eden_size  = align_size_up(desired_eden_size, alignment);
   42.30 -  desired_eden_size  = MAX2(desired_eden_size, alignment);
   42.31 +  desired_eden_size  = align_size_up(desired_eden_size, _space_alignment);
   42.32 +  desired_eden_size  = MAX2(desired_eden_size, _space_alignment);
   42.33  
   42.34 -  eden_limit  = align_size_down(eden_limit, alignment);
   42.35 +  eden_limit  = align_size_down(eden_limit, _space_alignment);
   42.36  
   42.37    // And one last limit check, now that we've aligned things.
   42.38    if (desired_eden_size > eden_limit) {
   42.39 @@ -561,11 +559,10 @@
   42.40    }
   42.41  
   42.42    // Align everything and make a final limit check
   42.43 -  const size_t alignment = _intra_generation_alignment;
   42.44 -  desired_promo_size = align_size_up(desired_promo_size, alignment);
   42.45 -  desired_promo_size = MAX2(desired_promo_size, alignment);
   42.46 +  desired_promo_size = align_size_up(desired_promo_size, _space_alignment);
   42.47 +  desired_promo_size = MAX2(desired_promo_size, _space_alignment);
   42.48  
   42.49 -  promo_limit = align_size_down(promo_limit, alignment);
   42.50 +  promo_limit = align_size_down(promo_limit, _space_alignment);
   42.51  
   42.52    // And one last limit check, now that we've aligned things.
   42.53    desired_promo_size = MIN2(desired_promo_size, promo_limit);
   42.54 @@ -650,7 +647,7 @@
   42.55      }
   42.56      // If the desired eden size is as small as it will get,
   42.57      // try to adjust the old gen size.
   42.58 -    if (*desired_eden_size_ptr <= _intra_generation_alignment) {
   42.59 +    if (*desired_eden_size_ptr <= _space_alignment) {
   42.60        // Vary the old gen size to reduce the young gen pause.  This
   42.61        // may not be a good idea.  This is just a test.
   42.62        if (minor_pause_old_estimator()->decrement_will_decrease()) {
   42.63 @@ -755,7 +752,7 @@
   42.64        // If the promo size is at the minimum (i.e., the old gen
   42.65        // size will not actually decrease), consider changing the
   42.66        // young gen size.
   42.67 -      if (*desired_promo_size_ptr < _intra_generation_alignment) {
   42.68 +      if (*desired_promo_size_ptr < _space_alignment) {
   42.69          // If increasing the young generation will decrease the old gen
   42.70          // pause, do it.
   42.71          // During startup there is noise in the statistics for deciding
   42.72 @@ -1066,24 +1063,24 @@
   42.73  
   42.74  size_t PSAdaptiveSizePolicy::eden_increment_aligned_up(size_t cur_eden) {
   42.75    size_t result = eden_increment(cur_eden, YoungGenerationSizeIncrement);
   42.76 -  return align_size_up(result, _intra_generation_alignment);
   42.77 +  return align_size_up(result, _space_alignment);
   42.78  }
   42.79  
   42.80  size_t PSAdaptiveSizePolicy::eden_increment_aligned_down(size_t cur_eden) {
   42.81    size_t result = eden_increment(cur_eden);
   42.82 -  return align_size_down(result, _intra_generation_alignment);
   42.83 +  return align_size_down(result, _space_alignment);
   42.84  }
   42.85  
   42.86  size_t PSAdaptiveSizePolicy::eden_increment_with_supplement_aligned_up(
   42.87    size_t cur_eden) {
   42.88    size_t result = eden_increment(cur_eden,
   42.89      YoungGenerationSizeIncrement + _young_gen_size_increment_supplement);
   42.90 -  return align_size_up(result, _intra_generation_alignment);
   42.91 +  return align_size_up(result, _space_alignment);
   42.92  }
   42.93  
   42.94  size_t PSAdaptiveSizePolicy::eden_decrement_aligned_down(size_t cur_eden) {
   42.95    size_t eden_heap_delta = eden_decrement(cur_eden);
   42.96 -  return align_size_down(eden_heap_delta, _intra_generation_alignment);
   42.97 +  return align_size_down(eden_heap_delta, _space_alignment);
   42.98  }
   42.99  
  42.100  size_t PSAdaptiveSizePolicy::eden_decrement(size_t cur_eden) {
  42.101 @@ -1105,24 +1102,24 @@
  42.102  
  42.103  size_t PSAdaptiveSizePolicy::promo_increment_aligned_up(size_t cur_promo) {
  42.104    size_t result =  promo_increment(cur_promo, TenuredGenerationSizeIncrement);
  42.105 -  return align_size_up(result, _intra_generation_alignment);
  42.106 +  return align_size_up(result, _space_alignment);
  42.107  }
  42.108  
  42.109  size_t PSAdaptiveSizePolicy::promo_increment_aligned_down(size_t cur_promo) {
  42.110    size_t result =  promo_increment(cur_promo, TenuredGenerationSizeIncrement);
  42.111 -  return align_size_down(result, _intra_generation_alignment);
  42.112 +  return align_size_down(result, _space_alignment);
  42.113  }
  42.114  
  42.115  size_t PSAdaptiveSizePolicy::promo_increment_with_supplement_aligned_up(
  42.116    size_t cur_promo) {
  42.117    size_t result =  promo_increment(cur_promo,
  42.118      TenuredGenerationSizeIncrement + _old_gen_size_increment_supplement);
  42.119 -  return align_size_up(result, _intra_generation_alignment);
  42.120 +  return align_size_up(result, _space_alignment);
  42.121  }
  42.122  
  42.123  size_t PSAdaptiveSizePolicy::promo_decrement_aligned_down(size_t cur_promo) {
  42.124    size_t promo_heap_delta = promo_decrement(cur_promo);
  42.125 -  return align_size_down(promo_heap_delta, _intra_generation_alignment);
  42.126 +  return align_size_down(promo_heap_delta, _space_alignment);
  42.127  }
  42.128  
  42.129  size_t PSAdaptiveSizePolicy::promo_decrement(size_t cur_promo) {
  42.130 @@ -1135,9 +1132,9 @@
  42.131                                               bool is_survivor_overflow,
  42.132                                               uint tenuring_threshold,
  42.133                                               size_t survivor_limit) {
  42.134 -  assert(survivor_limit >= _intra_generation_alignment,
  42.135 +  assert(survivor_limit >= _space_alignment,
  42.136           "survivor_limit too small");
  42.137 -  assert((size_t)align_size_down(survivor_limit, _intra_generation_alignment)
  42.138 +  assert((size_t)align_size_down(survivor_limit, _space_alignment)
  42.139           == survivor_limit, "survivor_limit not aligned");
  42.140  
  42.141    // This method is called even if the tenuring threshold and survivor
  42.142 @@ -1201,8 +1198,8 @@
  42.143    // We're trying to pad the survivor size as little as possible without
  42.144    // overflowing the survivor spaces.
  42.145    size_t target_size = align_size_up((size_t)_avg_survived->padded_average(),
  42.146 -                                     _intra_generation_alignment);
  42.147 -  target_size = MAX2(target_size, _intra_generation_alignment);
  42.148 +                                     _space_alignment);
  42.149 +  target_size = MAX2(target_size, _space_alignment);
  42.150  
  42.151    if (target_size > survivor_limit) {
  42.152      // Target size is bigger than we can handle. Let's also reduce
    43.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp	Wed Nov 20 11:08:09 2013 -0800
    43.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp	Thu Nov 21 12:30:35 2013 -0800
    43.3 @@ -91,7 +91,7 @@
    43.4    // for making ergonomic decisions.
    43.5    double _latest_major_mutator_interval_seconds;
    43.6  
    43.7 -  const size_t _intra_generation_alignment; // alignment for eden, survivors
    43.8 +  const size_t _space_alignment; // alignment for eden, survivors
    43.9  
   43.10    const double _gc_minor_pause_goal_sec;    // goal for maximum minor gc pause
   43.11  
   43.12 @@ -229,7 +229,7 @@
   43.13    PSAdaptiveSizePolicy(size_t init_eden_size,
   43.14                         size_t init_promo_size,
   43.15                         size_t init_survivor_size,
   43.16 -                       size_t intra_generation_alignment,
   43.17 +                       size_t space_alignment,
   43.18                         double gc_pause_goal_sec,
   43.19                         double gc_minor_pause_goal_sec,
   43.20                         uint gc_time_ratio);
   43.21 @@ -378,7 +378,7 @@
   43.22      // remain almost full anyway (top() will be near end(), but there will be a
   43.23      // large filler object at the bottom).
   43.24      const size_t sz = gen_size / MinSurvivorRatio;
   43.25 -    const size_t alignment = _intra_generation_alignment;
   43.26 +    const size_t alignment = _space_alignment;
   43.27      return sz > alignment ? align_size_down(sz, alignment) : alignment;
   43.28    }
   43.29  
    44.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp	Wed Nov 20 11:08:09 2013 -0800
    44.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp	Thu Nov 21 12:30:35 2013 -0800
    44.3 @@ -103,7 +103,7 @@
    44.4  
    44.5    // Compute maximum space sizes for performance counters
    44.6    ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
    44.7 -  size_t alignment = heap->intra_heap_alignment();
    44.8 +  size_t alignment = heap->space_alignment();
    44.9    size_t size = virtual_space()->reserved_size();
   44.10  
   44.11    size_t max_survivor_size;
   44.12 @@ -156,8 +156,9 @@
   44.13    assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity");
   44.14  
   44.15    // Compute sizes
   44.16 -  size_t alignment = heap->intra_heap_alignment();
   44.17 +  size_t alignment = heap->space_alignment();
   44.18    size_t size = virtual_space()->committed_size();
   44.19 +  assert(size >= 3 * alignment, "Young space is not large enough for eden + 2 survivors");
   44.20  
   44.21    size_t survivor_size = size / InitialSurvivorRatio;
   44.22    survivor_size = align_size_down(survivor_size, alignment);
   44.23 @@ -207,7 +208,7 @@
   44.24  #ifndef PRODUCT
   44.25  void PSYoungGen::space_invariants() {
   44.26    ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
   44.27 -  const size_t alignment = heap->intra_heap_alignment();
   44.28 +  const size_t alignment = heap->space_alignment();
   44.29  
   44.30    // Currently, our eden size cannot shrink to zero
   44.31    guarantee(eden_space()->capacity_in_bytes() >= alignment, "eden too small");
   44.32 @@ -491,7 +492,7 @@
   44.33    char* to_end     = (char*)to_space()->end();
   44.34  
   44.35    ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
   44.36 -  const size_t alignment = heap->intra_heap_alignment();
   44.37 +  const size_t alignment = heap->space_alignment();
   44.38    const bool maintain_minimum =
   44.39      (requested_eden_size + 2 * requested_survivor_size) <= min_gen_size();
   44.40  
   44.41 @@ -840,8 +841,8 @@
   44.42  size_t PSYoungGen::available_to_live() {
   44.43    size_t delta_in_survivor = 0;
   44.44    ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
   44.45 -  const size_t space_alignment = heap->intra_heap_alignment();
   44.46 -  const size_t gen_alignment = heap->young_gen_alignment();
   44.47 +  const size_t space_alignment = heap->space_alignment();
   44.48 +  const size_t gen_alignment = heap->generation_alignment();
   44.49  
   44.50    MutableSpace* space_shrinking = NULL;
   44.51    if (from_space()->end() > to_space()->end()) {
    45.1 --- a/src/share/vm/gc_interface/collectedHeap.cpp	Wed Nov 20 11:08:09 2013 -0800
    45.2 +++ b/src/share/vm/gc_interface/collectedHeap.cpp	Thu Nov 21 12:30:35 2013 -0800
    45.3 @@ -469,6 +469,10 @@
    45.4    fill_with_object_impl(start, words, zap);
    45.5  }
    45.6  
    45.7 +void CollectedHeap::post_initialize() {
    45.8 +  collector_policy()->post_heap_initialize();
    45.9 +}
   45.10 +
   45.11  HeapWord* CollectedHeap::allocate_new_tlab(size_t size) {
   45.12    guarantee(false, "thread-local allocation buffers not supported");
   45.13    return NULL;
    46.1 --- a/src/share/vm/interpreter/linkResolver.cpp	Wed Nov 20 11:08:09 2013 -0800
    46.2 +++ b/src/share/vm/interpreter/linkResolver.cpp	Thu Nov 21 12:30:35 2013 -0800
    46.3 @@ -152,11 +152,13 @@
    46.4      // Could be an Object method inherited into an interface, but still a vtable call.
    46.5      kind = CallInfo::vtable_call;
    46.6    } else if (!resolved_klass->is_interface()) {
    46.7 -    // A miranda method.  Compute the vtable index.
    46.8 +    // A default or miranda method.  Compute the vtable index.
    46.9      ResourceMark rm;
   46.10      klassVtable* vt = InstanceKlass::cast(resolved_klass)->vtable();
   46.11 -    index = vt->index_of_miranda(resolved_method->name(),
   46.12 -                                 resolved_method->signature());
   46.13 +    index = LinkResolver::vtable_index_of_interface_method(resolved_klass,
   46.14 +                           resolved_method);
   46.15 +    assert(index >= 0 , "we should have valid vtable index at this point");
   46.16 +
   46.17      kind = CallInfo::vtable_call;
   46.18    } else if (resolved_method->has_vtable_index()) {
   46.19      // Can occur if an interface redeclares a method of Object.
   46.20 @@ -279,7 +281,7 @@
   46.21  }
   46.22  
   46.23  int LinkResolver::vtable_index_of_interface_method(KlassHandle klass,
   46.24 -                                          methodHandle resolved_method, TRAPS) {
   46.25 +                                          methodHandle resolved_method) {
   46.26  
   46.27    int vtable_index = Method::invalid_vtable_index;
   46.28    Symbol* name = resolved_method->name();
   46.29 @@ -295,7 +297,7 @@
   46.30    }
   46.31    if (vtable_index == Method::invalid_vtable_index) {
   46.32      // get vtable_index for miranda methods
   46.33 -    ResourceMark rm(THREAD);
   46.34 +    ResourceMark rm;
   46.35      klassVtable *vt = InstanceKlass::cast(klass())->vtable();
   46.36      vtable_index = vt->index_of_miranda(name, signature);
   46.37    }
   46.38 @@ -691,7 +693,7 @@
   46.39                    );
   46.40      resolved_method->access_flags().print_on(tty);
   46.41      if (resolved_method->is_default_method()) {
   46.42 -      tty->print("default");
   46.43 +      tty->print("default ");
   46.44      }
   46.45      if (resolved_method->is_overpass()) {
   46.46        tty->print("overpass");
   46.47 @@ -937,7 +939,7 @@
   46.48                 );
   46.49      resolved_method->access_flags().print_on(tty);
   46.50      if (resolved_method->is_default_method()) {
   46.51 -      tty->print("default");
   46.52 +      tty->print("default ");
   46.53      }
   46.54      if (resolved_method->is_overpass()) {
   46.55        tty->print("overpass");
   46.56 @@ -1017,7 +1019,7 @@
   46.57                  );
   46.58      sel_method->access_flags().print_on(tty);
   46.59      if (sel_method->is_default_method()) {
   46.60 -      tty->print("default");
   46.61 +      tty->print("default ");
   46.62      }
   46.63      if (sel_method->is_overpass()) {
   46.64        tty->print("overpass");
   46.65 @@ -1081,7 +1083,7 @@
   46.66                    );
   46.67      resolved_method->access_flags().print_on(tty);
   46.68      if (resolved_method->is_default_method()) {
   46.69 -      tty->print("default");
   46.70 +      tty->print("default ");
   46.71      }
   46.72      if (resolved_method->is_overpass()) {
   46.73        tty->print("overpass");
   46.74 @@ -1118,7 +1120,7 @@
   46.75    // do lookup based on receiver klass using the vtable index
   46.76    if (resolved_method->method_holder()->is_interface()) { // miranda method
   46.77      vtable_index = vtable_index_of_interface_method(resolved_klass,
   46.78 -                           resolved_method, CHECK);
   46.79 +                           resolved_method);
   46.80      assert(vtable_index >= 0 , "we should have valid vtable index at this point");
   46.81  
   46.82      InstanceKlass* inst = InstanceKlass::cast(recv_klass());
   46.83 @@ -1175,7 +1177,7 @@
   46.84                    );
   46.85      selected_method->access_flags().print_on(tty);
   46.86      if (selected_method->is_default_method()) {
   46.87 -      tty->print("default");
   46.88 +      tty->print("default ");
   46.89      }
   46.90      if (selected_method->is_overpass()) {
   46.91        tty->print("overpass");
   46.92 @@ -1268,14 +1270,6 @@
   46.93                                                        sel_method->name(),
   46.94                                                        sel_method->signature()));
   46.95    }
   46.96 -  // setup result
   46.97 -  if (!resolved_method->has_itable_index()) {
   46.98 -    int vtable_index = resolved_method->vtable_index();
   46.99 -    assert(vtable_index == sel_method->vtable_index(), "sanity check");
  46.100 -    result.set_virtual(resolved_klass, recv_klass, resolved_method, sel_method, vtable_index, CHECK);
  46.101 -    return;
  46.102 -  }
  46.103 -  int itable_index = resolved_method()->itable_index();
  46.104  
  46.105    if (TraceItables && Verbose) {
  46.106      ResourceMark rm(THREAD);
  46.107 @@ -1289,14 +1283,22 @@
  46.108                    );
  46.109      sel_method->access_flags().print_on(tty);
  46.110      if (sel_method->is_default_method()) {
  46.111 -      tty->print("default");
  46.112 +      tty->print("default ");
  46.113      }
  46.114      if (sel_method->is_overpass()) {
  46.115        tty->print("overpass");
  46.116      }
  46.117      tty->cr();
  46.118    }
  46.119 -  result.set_interface(resolved_klass, recv_klass, resolved_method, sel_method, itable_index, CHECK);
  46.120 +  // setup result
  46.121 +  if (!resolved_method->has_itable_index()) {
  46.122 +    int vtable_index = resolved_method->vtable_index();
  46.123 +    assert(vtable_index == sel_method->vtable_index(), "sanity check");
  46.124 +    result.set_virtual(resolved_klass, recv_klass, resolved_method, sel_method, vtable_index, CHECK);
  46.125 +  } else {
  46.126 +    int itable_index = resolved_method()->itable_index();
  46.127 +    result.set_interface(resolved_klass, recv_klass, resolved_method, sel_method, itable_index, CHECK);
  46.128 +  }
  46.129  }
  46.130  
  46.131  
    47.1 --- a/src/share/vm/interpreter/linkResolver.hpp	Wed Nov 20 11:08:09 2013 -0800
    47.2 +++ b/src/share/vm/interpreter/linkResolver.hpp	Thu Nov 21 12:30:35 2013 -0800
    47.3 @@ -130,7 +130,6 @@
    47.4    static void lookup_polymorphic_method         (methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature,
    47.5                                                   KlassHandle current_klass, Handle *appendix_result_or_null, Handle *method_type_result, TRAPS);
    47.6  
    47.7 -  static int vtable_index_of_interface_method(KlassHandle klass, methodHandle resolved_method, TRAPS);
    47.8    static void resolve_klass           (KlassHandle& result, constantPoolHandle  pool, int index, TRAPS);
    47.9  
   47.10    static void resolve_pool  (KlassHandle& resolved_klass, Symbol*& method_name, Symbol*& method_signature, KlassHandle& current_klass, constantPoolHandle pool, int index, TRAPS);
   47.11 @@ -186,6 +185,7 @@
   47.12    static methodHandle resolve_interface_call_or_null(KlassHandle receiver_klass, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass);
   47.13    static methodHandle resolve_static_call_or_null   (KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass);
   47.14    static methodHandle resolve_special_call_or_null  (KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass);
   47.15 +  static int vtable_index_of_interface_method(KlassHandle klass, methodHandle resolved_method);
   47.16  
   47.17    // same as above for compile-time resolution; returns vtable_index if current_klass if linked
   47.18    static int resolve_virtual_vtable_index  (KlassHandle receiver_klass, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass);
    48.1 --- a/src/share/vm/interpreter/rewriter.cpp	Wed Nov 20 11:08:09 2013 -0800
    48.2 +++ b/src/share/vm/interpreter/rewriter.cpp	Thu Nov 21 12:30:35 2013 -0800
    48.3 @@ -70,21 +70,21 @@
    48.4  }
    48.5  
    48.6  // Unrewrite the bytecodes if an error occurs.
    48.7 -void Rewriter::restore_bytecodes() {
    48.8 +void Rewriter::restore_bytecodes(TRAPS) {
    48.9    int len = _methods->length();
   48.10  
   48.11    for (int i = len-1; i >= 0; i--) {
   48.12      Method* method = _methods->at(i);
   48.13 -    scan_method(method, true);
   48.14 +    scan_method(method, true, CHECK);
   48.15    }
   48.16  }
   48.17  
   48.18  // Creates a constant pool cache given a CPC map
   48.19  void Rewriter::make_constant_pool_cache(TRAPS) {
   48.20 -  const int length = _cp_cache_map.length();
   48.21    ClassLoaderData* loader_data = _pool->pool_holder()->class_loader_data();
   48.22    ConstantPoolCache* cache =
   48.23 -      ConstantPoolCache::allocate(loader_data, length, _cp_cache_map,
   48.24 +      ConstantPoolCache::allocate(loader_data, _cp_cache_map,
   48.25 +                                  _invokedynamic_cp_cache_map,
   48.26                                    _invokedynamic_references_map, CHECK);
   48.27  
   48.28    // initialize object cache in constant pool
   48.29 @@ -154,6 +154,31 @@
   48.30    }
   48.31  }
   48.32  
   48.33 +// If the constant pool entry for invokespecial is InterfaceMethodref,
   48.34 +// we need to add a separate cpCache entry for its resolution, because it is
   48.35 +// different than the resolution for invokeinterface with InterfaceMethodref.
   48.36 +// These cannot share cpCache entries.  It's unclear if all invokespecial to
   48.37 +// InterfaceMethodrefs would resolve to the same thing so a new cpCache entry
   48.38 +// is created for each one.  This was added with lambda.
   48.39 +void Rewriter::rewrite_invokespecial(address bcp, int offset, bool reverse, TRAPS) {
   48.40 +  static int count = 0;
   48.41 +  address p = bcp + offset;
   48.42 +  if (!reverse) {
   48.43 +    int cp_index = Bytes::get_Java_u2(p);
   48.44 +    int cache_index = add_invokespecial_cp_cache_entry(cp_index);
   48.45 +    if (cache_index != (int)(jushort) cache_index) {
   48.46 +      THROW_MSG(vmSymbols::java_lang_InternalError(),
   48.47 +                "This classfile overflows invokespecial for interfaces "
   48.48 +                "and cannot be loaded");
   48.49 +    }
   48.50 +    Bytes::put_native_u2(p, cache_index);
   48.51 +  } else {
   48.52 +    int cache_index = Bytes::get_native_u2(p);
   48.53 +    int cp_index = cp_cache_entry_pool_index(cache_index);
   48.54 +    Bytes::put_Java_u2(p, cp_index);
   48.55 +  }
   48.56 +}
   48.57 +
   48.58  
   48.59  // Adjust the invocation bytecode for a signature-polymorphic method (MethodHandle.invoke, etc.)
   48.60  void Rewriter::maybe_rewrite_invokehandle(address opc, int cp_index, int cache_index, bool reverse) {
   48.61 @@ -203,7 +228,7 @@
   48.62    if (!reverse) {
   48.63      int cp_index = Bytes::get_Java_u2(p);
   48.64      int cache_index = add_invokedynamic_cp_cache_entry(cp_index);
   48.65 -    add_invokedynamic_resolved_references_entries(cp_index, cache_index);
   48.66 +    int resolved_index = add_invokedynamic_resolved_references_entries(cp_index, cache_index);
   48.67      // Replace the trailing four bytes with a CPC index for the dynamic
   48.68      // call site.  Unlike other CPC entries, there is one per bytecode,
   48.69      // not just one per distinct CP entry.  In other words, the
   48.70 @@ -212,13 +237,20 @@
   48.71      // all these entries.  That is the main reason invokedynamic
   48.72      // must have a five-byte instruction format.  (Of course, other JVM
   48.73      // implementations can use the bytes for other purposes.)
   48.74 +    // Note: We use native_u4 format exclusively for 4-byte indexes.
   48.75      Bytes::put_native_u4(p, ConstantPool::encode_invokedynamic_index(cache_index));
   48.76 -    // Note: We use native_u4 format exclusively for 4-byte indexes.
   48.77 +    // add the bcp in case we need to patch this bytecode if we also find a
   48.78 +    // invokespecial/InterfaceMethodref in the bytecode stream
   48.79 +    _patch_invokedynamic_bcps->push(p);
   48.80 +    _patch_invokedynamic_refs->push(resolved_index);
   48.81    } else {
   48.82 -    // callsite index
   48.83      int cache_index = ConstantPool::decode_invokedynamic_index(
   48.84                          Bytes::get_native_u4(p));
   48.85 -    int cp_index = cp_cache_entry_pool_index(cache_index);
   48.86 +    // We will reverse the bytecode rewriting _after_ adjusting them.
   48.87 +    // Adjust the cache index by offset to the invokedynamic entries in the
   48.88 +    // cpCache plus the delta if the invokedynamic bytecodes were adjusted.
   48.89 +    cache_index = cp_cache_delta() + _first_iteration_cp_cache_limit;
   48.90 +    int cp_index = invokedynamic_cp_cache_entry_pool_index(cache_index);
   48.91      assert(_pool->tag_at(cp_index).is_invoke_dynamic(), "wrong index");
   48.92      // zero out 4 bytes
   48.93      Bytes::put_Java_u4(p, 0);
   48.94 @@ -226,6 +258,34 @@
   48.95    }
   48.96  }
   48.97  
   48.98 +void Rewriter::patch_invokedynamic_bytecodes() {
   48.99 +  // If the end of the cp_cache is the same as after initializing with the
  48.100 +  // cpool, nothing needs to be done.  Invokedynamic bytecodes are at the
  48.101 +  // correct offsets. ie. no invokespecials added
  48.102 +  int delta = cp_cache_delta();
  48.103 +  if (delta > 0) {
  48.104 +    int length = _patch_invokedynamic_bcps->length();
  48.105 +    assert(length == _patch_invokedynamic_refs->length(),
  48.106 +           "lengths should match");
  48.107 +    for (int i = 0; i < length; i++) {
  48.108 +      address p = _patch_invokedynamic_bcps->at(i);
  48.109 +      int cache_index = ConstantPool::decode_invokedynamic_index(
  48.110 +                          Bytes::get_native_u4(p));
  48.111 +      Bytes::put_native_u4(p, ConstantPool::encode_invokedynamic_index(cache_index + delta));
  48.112 +
  48.113 +      // invokedynamic resolved references map also points to cp cache and must
  48.114 +      // add delta to each.
  48.115 +      int resolved_index = _patch_invokedynamic_refs->at(i);
  48.116 +      for (int entry = 0; entry < ConstantPoolCacheEntry::_indy_resolved_references_entries; entry++) {
  48.117 +        assert(_invokedynamic_references_map[resolved_index+entry] == cache_index,
  48.118 +             "should be the same index");
  48.119 +        _invokedynamic_references_map.at_put(resolved_index+entry,
  48.120 +                                             cache_index + delta);
  48.121 +      }
  48.122 +    }
  48.123 +  }
  48.124 +}
  48.125 +
  48.126  
  48.127  // Rewrite some ldc bytecodes to _fast_aldc
  48.128  void Rewriter::maybe_rewrite_ldc(address bcp, int offset, bool is_wide,
  48.129 @@ -269,7 +329,7 @@
  48.130  
  48.131  
  48.132  // Rewrites a method given the index_map information
  48.133 -void Rewriter::scan_method(Method* method, bool reverse) {
  48.134 +void Rewriter::scan_method(Method* method, bool reverse, TRAPS) {
  48.135  
  48.136    int nof_jsrs = 0;
  48.137    bool has_monitor_bytecodes = false;
  48.138 @@ -329,12 +389,25 @@
  48.139  #endif
  48.140            break;
  48.141          }
  48.142 +
  48.143 +        case Bytecodes::_invokespecial  : {
  48.144 +          int offset = prefix_length + 1;
  48.145 +          address p = bcp + offset;
  48.146 +          int cp_index = Bytes::get_Java_u2(p);
  48.147 +          // InterfaceMethodref
  48.148 +          if (_pool->tag_at(cp_index).is_interface_method()) {
  48.149 +            rewrite_invokespecial(bcp, offset, reverse, CHECK);
  48.150 +          } else {
  48.151 +            rewrite_member_reference(bcp, offset, reverse);
  48.152 +          }
  48.153 +          break;
  48.154 +        }
  48.155 +
  48.156          case Bytecodes::_getstatic      : // fall through
  48.157          case Bytecodes::_putstatic      : // fall through
  48.158          case Bytecodes::_getfield       : // fall through
  48.159          case Bytecodes::_putfield       : // fall through
  48.160          case Bytecodes::_invokevirtual  : // fall through
  48.161 -        case Bytecodes::_invokespecial  : // fall through
  48.162          case Bytecodes::_invokestatic   :
  48.163          case Bytecodes::_invokeinterface:
  48.164          case Bytecodes::_invokehandle   : // if reverse=true
  48.165 @@ -426,16 +499,21 @@
  48.166  
  48.167    for (int i = len-1; i >= 0; i--) {
  48.168      Method* method = _methods->at(i);
  48.169 -    scan_method(method);
  48.170 +    scan_method(method, false, CHECK);  // If you get an error here,
  48.171 +                                        // there is no reversing bytecodes
  48.172    }
  48.173  
  48.174 +  // May have to fix invokedynamic bytecodes if invokestatic/InterfaceMethodref
  48.175 +  // entries had to be added.
  48.176 +  patch_invokedynamic_bytecodes();
  48.177 +
  48.178    // allocate constant pool cache, now that we've seen all the bytecodes
  48.179    make_constant_pool_cache(THREAD);
  48.180  
  48.181    // Restore bytecodes to their unrewritten state if there are exceptions
  48.182    // rewriting bytecodes or allocating the cpCache
  48.183    if (HAS_PENDING_EXCEPTION) {
  48.184 -    restore_bytecodes();
  48.185 +    restore_bytecodes(CATCH);
  48.186      return;
  48.187    }
  48.188  
  48.189 @@ -452,7 +530,7 @@
  48.190        // relocating bytecodes.  If some are relocated, that is ok because that
  48.191        // doesn't affect constant pool to cpCache rewriting.
  48.192        if (HAS_PENDING_EXCEPTION) {
  48.193 -        restore_bytecodes();
  48.194 +        restore_bytecodes(CATCH);
  48.195          return;
  48.196        }
  48.197        // Method might have gotten rewritten.
    49.1 --- a/src/share/vm/interpreter/rewriter.hpp	Wed Nov 20 11:08:09 2013 -0800
    49.2 +++ b/src/share/vm/interpreter/rewriter.hpp	Thu Nov 21 12:30:35 2013 -0800
    49.3 @@ -1,5 +1,5 @@
    49.4  /*
    49.5 - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
    49.6 + * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
    49.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    49.8   *
    49.9   * This code is free software; you can redistribute it and/or modify it
   49.10 @@ -46,55 +46,102 @@
   49.11    intArray            _method_handle_invokers;
   49.12    int                 _resolved_reference_limit;
   49.13  
   49.14 +  // For mapping invokedynamic bytecodes, which are discovered during method
   49.15 +  // scanning.  The invokedynamic entries are added at the end of the cpCache.
   49.16 +  // If there are any invokespecial/InterfaceMethodref special case bytecodes,
   49.17 +  // these entries are added before invokedynamic entries so that the
   49.18 +  // invokespecial bytecode 16 bit index doesn't overflow.
   49.19 +  intStack            _invokedynamic_cp_cache_map;
   49.20 +
   49.21 +  // For patching.
   49.22 +  GrowableArray<address>* _patch_invokedynamic_bcps;
   49.23 +  GrowableArray<int>*     _patch_invokedynamic_refs;
   49.24 +
   49.25    void init_maps(int length) {
   49.26      _cp_map.initialize(length, -1);
   49.27      // Choose an initial value large enough that we don't get frequent
   49.28      // calls to grow().
   49.29 -    _cp_cache_map.initialize(length / 2);
   49.30 +    _cp_cache_map.initialize(length/2);
   49.31      // Also cache resolved objects, in another different cache.
   49.32      _reference_map.initialize(length, -1);
   49.33 -    _resolved_references_map.initialize(length / 2);
   49.34 -    _invokedynamic_references_map.initialize(length / 2);
   49.35 +    _resolved_references_map.initialize(length/2);
   49.36 +    _invokedynamic_references_map.initialize(length/2);
   49.37      _resolved_reference_limit = -1;
   49.38 -    DEBUG_ONLY(_cp_cache_index_limit = -1);
   49.39 +    _first_iteration_cp_cache_limit = -1;
   49.40 +
   49.41 +    // invokedynamic specific fields
   49.42 +    _invokedynamic_cp_cache_map.initialize(length/4);
   49.43 +    _patch_invokedynamic_bcps = new GrowableArray<address>(length/4);
   49.44 +    _patch_invokedynamic_refs = new GrowableArray<int>(length/4);
   49.45    }
   49.46  
   49.47 -  int _cp_cache_index_limit;
   49.48 +  int _first_iteration_cp_cache_limit;
   49.49    void record_map_limits() {
   49.50 -#ifdef ASSERT
   49.51 -    // Record initial size of the two arrays generated for the CP cache:
   49.52 -    _cp_cache_index_limit = _cp_cache_map.length();
   49.53 -#endif //ASSERT
   49.54 +    // Record initial size of the two arrays generated for the CP cache
   49.55 +    // relative to walking the constant pool.
   49.56 +    _first_iteration_cp_cache_limit = _cp_cache_map.length();
   49.57      _resolved_reference_limit = _resolved_references_map.length();
   49.58    }
   49.59  
   49.60 +  int cp_cache_delta() {
   49.61 +    // How many cp cache entries were added since recording map limits after
   49.62 +    // cp cache initialization?
   49.63 +    assert(_first_iteration_cp_cache_limit != -1, "only valid after first iteration");
   49.64 +    return _cp_cache_map.length() - _first_iteration_cp_cache_limit;
   49.65 +  }
   49.66 +
   49.67    int  cp_entry_to_cp_cache(int i) { assert(has_cp_cache(i), "oob"); return _cp_map[i]; }
   49.68    bool has_cp_cache(int i) { return (uint)i < (uint)_cp_map.length() && _cp_map[i] >= 0; }
   49.69  
   49.70 +  int add_map_entry(int cp_index, intArray* cp_map, intStack* cp_cache_map) {
   49.71 +    assert(cp_map->at(cp_index) == -1, "not twice on same cp_index");
   49.72 +    int cache_index = cp_cache_map->append(cp_index);
   49.73 +    cp_map->at_put(cp_index, cache_index);
   49.74 +    return cache_index;
   49.75 +  }
   49.76 +
   49.77    int add_cp_cache_entry(int cp_index) {
   49.78      assert(_pool->tag_at(cp_index).value() != JVM_CONSTANT_InvokeDynamic, "use indy version");
   49.79 -    assert(_cp_map[cp_index] == -1, "not twice on same cp_index");
   49.80 -    assert(_cp_cache_index_limit == -1, "do not add cache entries after first iteration");
   49.81 -    int cache_index = _cp_cache_map.append(cp_index);
   49.82 -    _cp_map.at_put(cp_index, cache_index);
   49.83 +    assert(_first_iteration_cp_cache_limit == -1, "do not add cache entries after first iteration");
   49.84 +    int cache_index = add_map_entry(cp_index, &_cp_map, &_cp_cache_map);
   49.85      assert(cp_entry_to_cp_cache(cp_index) == cache_index, "");
   49.86      assert(cp_cache_entry_pool_index(cache_index) == cp_index, "");
   49.87      return cache_index;
   49.88    }
   49.89  
   49.90 -  // add a new CP cache entry beyond the normal cache (for invokedynamic only)
   49.91    int add_invokedynamic_cp_cache_entry(int cp_index) {
   49.92      assert(_pool->tag_at(cp_index).value() == JVM_CONSTANT_InvokeDynamic, "use non-indy version");
   49.93 -    assert(_cp_map[cp_index] == -1, "do not map from cp_index");
   49.94 -    assert(_cp_cache_index_limit >= 0, "add indy cache entries after first iteration");
   49.95 +    assert(_first_iteration_cp_cache_limit >= 0, "add indy cache entries after first iteration");
   49.96 +    // add to the invokedynamic index map.
   49.97 +    int cache_index = _invokedynamic_cp_cache_map.append(cp_index);
   49.98 +    // do not update _cp_map, since the mapping is one-to-many
   49.99 +    assert(invokedynamic_cp_cache_entry_pool_index(cache_index) == cp_index, "");
  49.100 +    // this index starts at one but in the bytecode it's appended to the end.
  49.101 +    return cache_index + _first_iteration_cp_cache_limit;
  49.102 +  }
  49.103 +
  49.104 +  int invokedynamic_cp_cache_entry_pool_index(int cache_index) {
  49.105 +    int cp_index = _invokedynamic_cp_cache_map[cache_index];
  49.106 +    return cp_index;
  49.107 +  }
  49.108 +
  49.109 +  // add a new CP cache entry beyond the normal cache for the special case of
  49.110 +  // invokespecial with InterfaceMethodref as cpool operand.
  49.111 +  int add_invokespecial_cp_cache_entry(int cp_index) {
  49.112 +    assert(_first_iteration_cp_cache_limit >= 0, "add these special cache entries after first iteration");
  49.113 +    // Don't add InterfaceMethodref if it already exists at the end.
  49.114 +    for (int i = _first_iteration_cp_cache_limit; i < _cp_cache_map.length(); i++) {
  49.115 +     if (cp_cache_entry_pool_index(i) == cp_index) {
  49.116 +       return i;
  49.117 +     }
  49.118 +    }
  49.119      int cache_index = _cp_cache_map.append(cp_index);
  49.120 -    assert(cache_index >= _cp_cache_index_limit, "");
  49.121 +    assert(cache_index >= _first_iteration_cp_cache_limit, "");
  49.122      // do not update _cp_map, since the mapping is one-to-many
  49.123      assert(cp_cache_entry_pool_index(cache_index) == cp_index, "");
  49.124      return cache_index;
  49.125    }
  49.126  
  49.127 -  // fix duplicated code later
  49.128    int  cp_entry_to_resolved_references(int cp_index) const {
  49.129      assert(has_entry_in_resolved_references(cp_index), "oob");
  49.130      return _reference_map[cp_index];
  49.131 @@ -105,10 +152,7 @@
  49.132  
  49.133    // add a new entry to the resolved_references map
  49.134    int add_resolved_references_entry(int cp_index) {
  49.135 -    assert(_reference_map[cp_index] == -1, "not twice on same cp_index");
  49.136 -    assert(_resolved_reference_limit == -1, "do not add CP refs after first iteration");
  49.137 -    int ref_index = _resolved_references_map.append(cp_index);
  49.138 -    _reference_map.at_put(cp_index, ref_index);
  49.139 +    int ref_index = add_map_entry(cp_index, &_reference_map, &_resolved_references_map);
  49.140      assert(cp_entry_to_resolved_references(cp_index) == ref_index, "");
  49.141      return ref_index;
  49.142    }
  49.143 @@ -137,7 +181,7 @@
  49.144    // Access the contents of _cp_cache_map to determine CP cache layout.
  49.145    int cp_cache_entry_pool_index(int cache_index) {
  49.146      int cp_index = _cp_cache_map[cache_index];
  49.147 -      return cp_index;
  49.148 +    return cp_index;
  49.149    }
  49.150  
  49.151    // All the work goes in here:
  49.152 @@ -145,14 +189,18 @@
  49.153  
  49.154    void compute_index_maps();
  49.155    void make_constant_pool_cache(TRAPS);
  49.156 -  void scan_method(Method* m, bool reverse = false);
  49.157 +  void scan_method(Method* m, bool reverse, TRAPS);
  49.158    void rewrite_Object_init(methodHandle m, TRAPS);
  49.159 -  void rewrite_member_reference(address bcp, int offset, bool reverse = false);
  49.160 -  void maybe_rewrite_invokehandle(address opc, int cp_index, int cache_index, bool reverse = false);
  49.161 -  void rewrite_invokedynamic(address bcp, int offset, bool reverse = false);
  49.162 -  void maybe_rewrite_ldc(address bcp, int offset, bool is_wide, bool reverse = false);
  49.163 +  void rewrite_member_reference(address bcp, int offset, bool reverse);
  49.164 +  void maybe_rewrite_invokehandle(address opc, int cp_index, int cache_index, bool reverse);
  49.165 +  void rewrite_invokedynamic(address bcp, int offset, bool reverse);
  49.166 +  void maybe_rewrite_ldc(address bcp, int offset, bool is_wide, bool reverse);
  49.167 +  void rewrite_invokespecial(address bcp, int offset, bool reverse, TRAPS);
  49.168 +
  49.169 +  void patch_invokedynamic_bytecodes();
  49.170 +
  49.171    // Revert bytecodes in case of an exception.
  49.172 -  void restore_bytecodes();
  49.173 +  void restore_bytecodes(TRAPS);
  49.174  
  49.175    static methodHandle rewrite_jsrs(methodHandle m, TRAPS);
  49.176   public:
    50.1 --- a/src/share/vm/memory/collectorPolicy.cpp	Wed Nov 20 11:08:09 2013 -0800
    50.2 +++ b/src/share/vm/memory/collectorPolicy.cpp	Thu Nov 21 12:30:35 2013 -0800
    50.3 @@ -47,54 +47,107 @@
    50.4  
    50.5  // CollectorPolicy methods.
    50.6  
    50.7 +CollectorPolicy::CollectorPolicy() :
    50.8 +    _space_alignment(0),
    50.9 +    _heap_alignment(0),
   50.10 +    _initial_heap_byte_size(InitialHeapSize),
   50.11 +    _max_heap_byte_size(MaxHeapSize),
   50.12 +    _min_heap_byte_size(Arguments::min_heap_size()),
   50.13 +    _max_heap_size_cmdline(false),
   50.14 +    _size_policy(NULL),
   50.15 +    _should_clear_all_soft_refs(false),
   50.16 +    _all_soft_refs_clear(false)
   50.17 +{}
   50.18 +
   50.19 +#ifdef ASSERT
   50.20 +void CollectorPolicy::assert_flags() {
   50.21 +  assert(InitialHeapSize <= MaxHeapSize, "Ergonomics decided on incompatible initial and maximum heap sizes");
   50.22 +  assert(InitialHeapSize % _heap_alignment == 0, "InitialHeapSize alignment");
   50.23 +  assert(MaxHeapSize % _heap_alignment == 0, "MaxHeapSize alignment");
   50.24 +}
   50.25 +
   50.26 +void CollectorPolicy::assert_size_info() {
   50.27 +  assert(InitialHeapSize == _initial_heap_byte_size, "Discrepancy between InitialHeapSize flag and local storage");
   50.28 +  assert(MaxHeapSize == _max_heap_byte_size, "Discrepancy between MaxHeapSize flag and local storage");
   50.29 +  assert(_max_heap_byte_size >= _min_heap_byte_size, "Ergonomics decided on incompatible minimum and maximum heap sizes");
   50.30 +  assert(_initial_heap_byte_size >= _min_heap_byte_size, "Ergonomics decided on incompatible initial and minimum heap sizes");
   50.31 +  assert(_max_heap_byte_size >= _initial_heap_byte_size, "Ergonomics decided on incompatible initial and maximum heap sizes");
   50.32 +  assert(_min_heap_byte_size % _heap_alignment == 0, "min_heap_byte_size alignment");
   50.33 +  assert(_initial_heap_byte_size % _heap_alignment == 0, "initial_heap_byte_size alignment");
   50.34 +  assert(_max_heap_byte_size % _heap_alignment == 0, "max_heap_byte_size alignment");
   50.35 +}
   50.36 +#endif // ASSERT
   50.37 +
   50.38  void CollectorPolicy::initialize_flags() {
   50.39 -  assert(_max_alignment >= _min_alignment,
   50.40 -         err_msg("max_alignment: " SIZE_FORMAT " less than min_alignment: " SIZE_FORMAT,
   50.41 -                 _max_alignment, _min_alignment));
   50.42 -  assert(_max_alignment % _min_alignment == 0,
   50.43 -         err_msg("max_alignment: " SIZE_FORMAT " not aligned by min_alignment: " SIZE_FORMAT,
   50.44 -                 _max_alignment, _min_alignment));
   50.45 +  assert(_space_alignment != 0, "Space alignment not set up properly");
   50.46 +  assert(_heap_alignment != 0, "Heap alignment not set up properly");
   50.47 +  assert(_heap_alignment >= _space_alignment,
   50.48 +         err_msg("heap_alignment: " SIZE_FORMAT " less than space_alignment: " SIZE_FORMAT,
   50.49 +                 _heap_alignment, _space_alignment));
   50.50 +  assert(_heap_alignment % _space_alignment == 0,
   50.51 +         err_msg("heap_alignment: " SIZE_FORMAT " not aligned by space_alignment: " SIZE_FORMAT,
   50.52 +                 _heap_alignment, _space_alignment));
   50.53  
   50.54 -  if (MaxHeapSize < InitialHeapSize) {
   50.55 -    vm_exit_during_initialization("Incompatible initial and maximum heap sizes specified");
   50.56 +  if (FLAG_IS_CMDLINE(MaxHeapSize)) {
   50.57 +    if (FLAG_IS_CMDLINE(InitialHeapSize) && InitialHeapSize > MaxHeapSize) {
   50.58 +      vm_exit_during_initialization("Initial heap size set to a larger value than the maximum heap size");
   50.59 +    }
   50.60 +    if (_min_heap_byte_size != 0 && MaxHeapSize < _min_heap_byte_size) {
   50.61 +      vm_exit_during_initialization("Incompatible minimum and maximum heap sizes specified");
   50.62 +    }
   50.63 +    _max_heap_size_cmdline = true;
   50.64    }
   50.65  
   50.66 -  MinHeapDeltaBytes = align_size_up(MinHeapDeltaBytes, _min_alignment);
   50.67 +  // Check heap parameter properties
   50.68 +  if (InitialHeapSize < M) {
   50.69 +    vm_exit_during_initialization("Too small initial heap");
   50.70 +  }
   50.71 +  if (_min_heap_byte_size < M) {
   50.72 +    vm_exit_during_initialization("Too small minimum heap");
   50.73 +  }
   50.74 +
   50.75 +  // User inputs from -Xmx and -Xms must be aligned
   50.76 +  _min_heap_byte_size = align_size_up(_min_heap_byte_size, _heap_alignment);
   50.77 +  uintx aligned_initial_heap_size = align_size_up(InitialHeapSize, _heap_alignment);
   50.78 +  uintx aligned_max_heap_size = align_size_up(MaxHeapSize, _heap_alignment);
   50.79 +
   50.80 +  // Write back to flags if the values changed
   50.81 +  if (aligned_initial_heap_size != InitialHeapSize) {
   50.82 +    FLAG_SET_ERGO(uintx, InitialHeapSize, aligned_initial_heap_size);
   50.83 +  }
   50.84 +  if (aligned_max_heap_size != MaxHeapSize) {
   50.85 +    FLAG_SET_ERGO(uintx, MaxHeapSize, aligned_max_heap_size);
   50.86 +  }
   50.87 +
   50.88 +  if (FLAG_IS_CMDLINE(InitialHeapSize) && _min_heap_byte_size != 0 &&
   50.89 +      InitialHeapSize < _min_heap_byte_size) {
   50.90 +    vm_exit_during_initialization("Incompatible minimum and initial heap sizes specified");
   50.91 +  }
   50.92 +  if (!FLAG_IS_DEFAULT(InitialHeapSize) && InitialHeapSize > MaxHeapSize) {
   50.93 +    FLAG_SET_ERGO(uintx, MaxHeapSize, InitialHeapSize);
   50.94 +  } else if (!FLAG_IS_DEFAULT(MaxHeapSize) && InitialHeapSize > MaxHeapSize) {
   50.95 +    FLAG_SET_ERGO(uintx, InitialHeapSize, MaxHeapSize);
   50.96 +    if (InitialHeapSize < _min_heap_byte_size) {
   50.97 +      _min_heap_byte_size = InitialHeapSize;
   50.98 +    }
   50.99 +  }
  50.100 +
  50.101 +  _initial_heap_byte_size = InitialHeapSize;
  50.102 +  _max_heap_byte_size = MaxHeapSize;
  50.103 +
  50.104 +  FLAG_SET_ERGO(uintx, MinHeapDeltaBytes, align_size_up(MinHeapDeltaBytes, _space_alignment));
  50.105 +
  50.106 +  DEBUG_ONLY(CollectorPolicy::assert_flags();)
  50.107  }
  50.108  
  50.109  void CollectorPolicy::initialize_size_info() {
  50.110 -  // User inputs from -mx and ms must be aligned
  50.111 -  _min_heap_byte_size = align_size_up(Arguments::min_heap_size(), _min_alignment);
  50.112 -  _initial_heap_byte_size = align_size_up(InitialHeapSize, _min_alignment);
  50.113 -  _max_heap_byte_size = align_size_up(MaxHeapSize, _max_alignment);
  50.114 -
  50.115 -  // Check heap parameter properties
  50.116 -  if (_initial_heap_byte_size < M) {
  50.117 -    vm_exit_during_initialization("Too small initial heap");
  50.118 -  }
  50.119 -  // Check heap parameter properties
  50.120 -  if (_min_heap_byte_size < M) {
  50.121 -    vm_exit_during_initialization("Too small minimum heap");
  50.122 -  }
  50.123 -  if (_initial_heap_byte_size <= NewSize) {
  50.124 -     // make sure there is at least some room in old space
  50.125 -    vm_exit_during_initialization("Too small initial heap for new size specified");
  50.126 -  }
  50.127 -  if (_max_heap_byte_size < _min_heap_byte_size) {
  50.128 -    vm_exit_during_initialization("Incompatible minimum and maximum heap sizes specified");
  50.129 -  }
  50.130 -  if (_initial_heap_byte_size < _min_heap_byte_size) {
  50.131 -    vm_exit_during_initialization("Incompatible minimum and initial heap sizes specified");
  50.132 -  }
  50.133 -  if (_max_heap_byte_size < _initial_heap_byte_size) {
  50.134 -    vm_exit_during_initialization("Incompatible initial and maximum heap sizes specified");
  50.135 -  }
  50.136 -
  50.137    if (PrintGCDetails && Verbose) {
  50.138      gclog_or_tty->print_cr("Minimum heap " SIZE_FORMAT "  Initial heap "
  50.139        SIZE_FORMAT "  Maximum heap " SIZE_FORMAT,
  50.140        _min_heap_byte_size, _initial_heap_byte_size, _max_heap_byte_size);
  50.141    }
  50.142 +
  50.143 +  DEBUG_ONLY(CollectorPolicy::assert_size_info();)
  50.144  }
  50.145  
  50.146  bool CollectorPolicy::use_should_clear_all_soft_refs(bool v) {
  50.147 @@ -105,7 +158,6 @@
  50.148  
  50.149  GenRemSet* CollectorPolicy::create_rem_set(MemRegion whole_heap,
  50.150                                             int max_covered_regions) {
  50.151 -  assert(rem_set_name() == GenRemSet::CardTable, "unrecognized GenRemSet::Name");
  50.152    return new CardTableRS(whole_heap, max_covered_regions);
  50.153  }
  50.154  
  50.155 @@ -119,7 +171,7 @@
  50.156    _all_soft_refs_clear = true;
  50.157  }
  50.158  
  50.159 -size_t CollectorPolicy::compute_max_alignment() {
  50.160 +size_t CollectorPolicy::compute_heap_alignment() {
  50.161    // The card marking array and the offset arrays for old generations are
  50.162    // committed in os pages as well. Make sure they are entirely full (to
  50.163    // avoid partial page problems), e.g. if 512 bytes heap corresponds to 1
  50.164 @@ -146,18 +198,21 @@
  50.165  
  50.166  // GenCollectorPolicy methods.
  50.167  
  50.168 +GenCollectorPolicy::GenCollectorPolicy() :
  50.169 +    _min_gen0_size(0),
  50.170 +    _initial_gen0_size(0),
  50.171 +    _max_gen0_size(0),
  50.172 +    _gen_alignment(0),
  50.173 +    _generations(NULL)
  50.174 +{}
  50.175 +
  50.176  size_t GenCollectorPolicy::scale_by_NewRatio_aligned(size_t base_size) {
  50.177 -  size_t x = base_size / (NewRatio+1);
  50.178 -  size_t new_gen_size = x > _min_alignment ?
  50.179 -                     align_size_down(x, _min_alignment) :
  50.180 -                     _min_alignment;
  50.181 -  return new_gen_size;
  50.182 +  return align_size_down_bounded(base_size / (NewRatio + 1), _gen_alignment);
  50.183  }
  50.184  
  50.185  size_t GenCollectorPolicy::bound_minus_alignment(size_t desired_size,
  50.186                                                   size_t maximum_size) {
  50.187 -  size_t alignment = _min_alignment;
  50.188 -  size_t max_minus = maximum_size - alignment;
  50.189 +  size_t max_minus = maximum_size - _gen_alignment;
  50.190    return desired_size < max_minus ? desired_size : max_minus;
  50.191  }
  50.192  
  50.193 @@ -165,7 +220,7 @@
  50.194  void GenCollectorPolicy::initialize_size_policy(size_t init_eden_size,
  50.195                                                  size_t init_promo_size,
  50.196                                                  size_t init_survivor_size) {
  50.197 -  const double max_gc_pause_sec = ((double) MaxGCPauseMillis)/1000.0;
  50.198 +  const double max_gc_pause_sec = ((double) MaxGCPauseMillis) / 1000.0;
  50.199    _size_policy = new AdaptiveSizePolicy(init_eden_size,
  50.200                                          init_promo_size,
  50.201                                          init_survivor_size,
  50.202 @@ -173,100 +228,181 @@
  50.203                                          GCTimeRatio);
  50.204  }
  50.205  
  50.206 +size_t GenCollectorPolicy::young_gen_size_lower_bound() {
  50.207 +  // The young generation must be aligned and have room for eden + two survivors
  50.208 +  return align_size_up(3 * _space_alignment, _gen_alignment);
  50.209 +}
  50.210 +
  50.211 +#ifdef ASSERT
  50.212 +void GenCollectorPolicy::assert_flags() {
  50.213 +  CollectorPolicy::assert_flags();
  50.214 +  assert(NewSize >= _min_gen0_size, "Ergonomics decided on a too small young gen size");
  50.215 +  assert(NewSize <= MaxNewSize, "Ergonomics decided on incompatible initial and maximum young gen sizes");
  50.216 +  assert(FLAG_IS_DEFAULT(MaxNewSize) || MaxNewSize < MaxHeapSize, "Ergonomics decided on incompatible maximum young gen and heap sizes");
  50.217 +  assert(NewSize % _gen_alignment == 0, "NewSize alignment");
  50.218 +  assert(FLAG_IS_DEFAULT(MaxNewSize) || MaxNewSize % _gen_alignment == 0, "MaxNewSize alignment");
  50.219 +}
  50.220 +
  50.221 +void TwoGenerationCollectorPolicy::assert_flags() {
  50.222 +  GenCollectorPolicy::assert_flags();
  50.223 +  assert(OldSize + NewSize <= MaxHeapSize, "Ergonomics decided on incompatible generation and heap sizes");
  50.224 +  assert(OldSize % _gen_alignment == 0, "OldSize alignment");
  50.225 +}
  50.226 +
  50.227 +void GenCollectorPolicy::assert_size_info() {
  50.228 +  CollectorPolicy::assert_size_info();
  50.229 +  // GenCollectorPolicy::initialize_size_info may update the MaxNewSize
  50.230 +  assert(MaxNewSize < MaxHeapSize, "Ergonomics decided on incompatible maximum young and heap sizes");
  50.231 +  assert(NewSize == _initial_gen0_size, "Discrepancy between NewSize flag and local storage");
  50.232 +  assert(MaxNewSize == _max_gen0_size, "Discrepancy between MaxNewSize flag and local storage");
  50.233 +  assert(_min_gen0_size <= _initial_gen0_size, "Ergonomics decided on incompatible minimum and initial young gen sizes");
  50.234 +  assert(_initial_gen0_size <= _max_gen0_size, "Ergonomics decided on incompatible initial and maximum young gen sizes");
  50.235 +  assert(_min_gen0_size % _gen_alignment == 0, "_min_gen0_size alignment");
  50.236 +  assert(_initial_gen0_size % _gen_alignment == 0, "_initial_gen0_size alignment");
  50.237 +  assert(_max_gen0_size % _gen_alignment == 0, "_max_gen0_size alignment");
  50.238 +}
  50.239 +
  50.240 +void TwoGenerationCollectorPolicy::assert_size_info() {
  50.241 +  GenCollectorPolicy::assert_size_info();
  50.242 +  assert(OldSize == _initial_gen1_size, "Discrepancy between OldSize flag and local storage");
  50.243 +  assert(_min_gen1_size <= _initial_gen1_size, "Ergonomics decided on incompatible minimum and initial old gen sizes");
  50.244 +  assert(_initial_gen1_size <= _max_gen1_size, "Ergonomics decided on incompatible initial and maximum old gen sizes");
  50.245 +  assert(_max_gen1_size % _gen_alignment == 0, "_max_gen1_size alignment");
  50.246 +  assert(_initial_gen1_size % _gen_alignment == 0, "_initial_gen1_size alignment");
  50.247 +  assert(_max_heap_byte_size <= (_max_gen0_size + _max_gen1_size), "Total maximum heap sizes must be sum of generation maximum sizes");
  50.248 +}
  50.249 +#endif // ASSERT
  50.250 +
  50.251  void GenCollectorPolicy::initialize_flags() {
  50.252 -  // All sizes must be multiples of the generation granularity.
  50.253 -  _min_alignment = (uintx) Generation::GenGrain;
  50.254 -  _max_alignment = compute_max_alignment();
  50.255 -
  50.256    CollectorPolicy::initialize_flags();
  50.257  
  50.258 -  // All generational heaps have a youngest gen; handle those flags here.
  50.259 +  assert(_gen_alignment != 0, "Generation alignment not set up properly");
  50.260 +  assert(_heap_alignment >= _gen_alignment,
  50.261 +         err_msg("heap_alignment: " SIZE_FORMAT " less than gen_alignment: " SIZE_FORMAT,
  50.262 +                 _heap_alignment, _gen_alignment));
  50.263 +  assert(_gen_alignment % _space_alignment == 0,
  50.264 +         err_msg("gen_alignment: " SIZE_FORMAT " not aligned by space_alignment: " SIZE_FORMAT,
  50.265 +                 _gen_alignment, _space_alignment));
  50.266 +  assert(_heap_alignment % _gen_alignment == 0,
  50.267 +         err_msg("heap_alignment: " SIZE_FORMAT " not aligned by gen_alignment: " SIZE_FORMAT,
  50.268 +                 _heap_alignment, _gen_alignment));
  50.269  
  50.270 -  // Adjust max size parameters
  50.271 +  // All generational heaps have a youngest gen; handle those flags here
  50.272 +
  50.273 +  // Make sure the heap is large enough for two generations
  50.274 +  uintx smallest_new_size = young_gen_size_lower_bound();
  50.275 +  uintx smallest_heap_size = align_size_up(smallest_new_size + align_size_up(_space_alignment, _gen_alignment),
  50.276 +                                           _heap_alignment);
  50.277 +  if (MaxHeapSize < smallest_heap_size) {
  50.278 +    FLAG_SET_ERGO(uintx, MaxHeapSize, smallest_heap_size);
  50.279 +    _max_heap_byte_size = MaxHeapSize;
  50.280 +  }
  50.281 +  // If needed, synchronize _min_heap_byte size and _initial_heap_byte_size
  50.282 +  if (_min_heap_byte_size < smallest_heap_size) {
  50.283 +    _min_heap_byte_size = smallest_heap_size;
  50.284 +    if (InitialHeapSize < _min_heap_byte_size) {
  50.285 +      FLAG_SET_ERGO(uintx, InitialHeapSize, smallest_heap_size);
  50.286 +      _initial_heap_byte_size = smallest_heap_size;
  50.287 +    }
  50.288 +  }
  50.289 +
  50.290 +  // Now take the actual NewSize into account. We will silently increase NewSize
  50.291 +  // if the user specified a smaller value.
  50.292 +  smallest_new_size = MAX2(smallest_new_size, (uintx)align_size_down(NewSize, _gen_alignment));
  50.293 +  if (smallest_new_size != NewSize) {
  50.294 +    FLAG_SET_ERGO(uintx, NewSize, smallest_new_size);
  50.295 +  }
  50.296 +  _initial_gen0_size = NewSize;
  50.297 +
  50.298 +  if (!FLAG_IS_DEFAULT(MaxNewSize)) {
  50.299 +    uintx min_new_size = MAX2(_gen_alignment, _min_gen0_size);
  50.300 +
  50.301 +    if (MaxNewSize >= MaxHeapSize) {
  50.302 +      // Make sure there is room for an old generation
  50.303 +      uintx smaller_max_new_size = MaxHeapSize - _gen_alignment;
  50.304 +      if (FLAG_IS_CMDLINE(MaxNewSize)) {
  50.305 +        warning("MaxNewSize (" SIZE_FORMAT "k) is equal to or greater than the entire "
  50.306 +                "heap (" SIZE_FORMAT "k).  A new max generation size of " SIZE_FORMAT "k will be used.",
  50.307 +                MaxNewSize/K, MaxHeapSize/K, smaller_max_new_size/K);
  50.308 +      }
  50.309 +      FLAG_SET_ERGO(uintx, MaxNewSize, smaller_max_new_size);
  50.310 +      if (NewSize > MaxNewSize) {
  50.311 +        FLAG_SET_ERGO(uintx, NewSize, MaxNewSize);
  50.312 +        _initial_gen0_size = NewSize;
  50.313 +      }
  50.314 +    } else if (MaxNewSize < min_new_size) {
  50.315 +      FLAG_SET_ERGO(uintx, MaxNewSize, min_new_size);
  50.316 +    } else if (!is_size_aligned(MaxNewSize, _gen_alignment)) {
  50.317 +      FLAG_SET_ERGO(uintx, MaxNewSize, align_size_down(MaxNewSize, _gen_alignment));
  50.318 +    }
  50.319 +    _max_gen0_size = MaxNewSize;
  50.320 +  }
  50.321 +
  50.322    if (NewSize > MaxNewSize) {
  50.323 -    MaxNewSize = NewSize;
  50.324 +    // At this point this should only happen if the user specifies a large NewSize and/or
  50.325 +    // a small (but not too small) MaxNewSize.
  50.326 +    if (FLAG_IS_CMDLINE(MaxNewSize)) {
  50.327 +      warning("NewSize (" SIZE_FORMAT "k) is greater than the MaxNewSize (" SIZE_FORMAT "k). "
  50.328 +              "A new max generation size of " SIZE_FORMAT "k will be used.",
  50.329 +              NewSize/K, MaxNewSize/K, NewSize/K);
  50.330 +    }
  50.331 +    FLAG_SET_ERGO(uintx, MaxNewSize, NewSize);
  50.332 +    _max_gen0_size = MaxNewSize;
  50.333    }
  50.334 -  NewSize = align_size_down(NewSize, _min_alignment);
  50.335 -  MaxNewSize = align_size_down(MaxNewSize, _min_alignment);
  50.336  
  50.337 -  // Check validity of heap flags
  50.338 -  assert(NewSize     % _min_alignment == 0, "eden space alignment");
  50.339 -  assert(MaxNewSize  % _min_alignment == 0, "survivor space alignment");
  50.340 -
  50.341 -  if (NewSize < 3 * _min_alignment) {
  50.342 -     // make sure there room for eden and two survivor spaces
  50.343 -    vm_exit_during_initialization("Too small new size specified");
  50.344 -  }
  50.345    if (SurvivorRatio < 1 || NewRatio < 1) {
  50.346      vm_exit_during_initialization("Invalid young gen ratio specified");
  50.347    }
  50.348 +
  50.349 +  DEBUG_ONLY(GenCollectorPolicy::assert_flags();)
  50.350  }
  50.351  
  50.352  void TwoGenerationCollectorPolicy::initialize_flags() {
  50.353    GenCollectorPolicy::initialize_flags();
  50.354  
  50.355 -  OldSize = align_size_down(OldSize, _min_alignment);
  50.356 +  if (!is_size_aligned(OldSize, _gen_alignment)) {
  50.357 +    FLAG_SET_ERGO(uintx, OldSize, align_size_down(OldSize, _gen_alignment));
  50.358 +  }
  50.359  
  50.360 -  if (FLAG_IS_CMDLINE(OldSize) && FLAG_IS_DEFAULT(NewSize)) {
  50.361 +  if (FLAG_IS_CMDLINE(OldSize) && FLAG_IS_DEFAULT(MaxHeapSize)) {
  50.362      // NewRatio will be used later to set the young generation size so we use
  50.363      // it to calculate how big the heap should be based on the requested OldSize
  50.364      // and NewRatio.
  50.365      assert(NewRatio > 0, "NewRatio should have been set up earlier");
  50.366      size_t calculated_heapsize = (OldSize / NewRatio) * (NewRatio + 1);
  50.367  
  50.368 -    calculated_heapsize = align_size_up(calculated_heapsize, _max_alignment);
  50.369 -    MaxHeapSize = calculated_heapsize;
  50.370 -    InitialHeapSize = calculated_heapsize;
  50.371 +    calculated_heapsize = align_size_up(calculated_heapsize, _heap_alignment);
  50.372 +    FLAG_SET_ERGO(uintx, MaxHeapSize, calculated_heapsize);
  50.373 +    _max_heap_byte_size = MaxHeapSize;
  50.374 +    FLAG_SET_ERGO(uintx, InitialHeapSize, calculated_heapsize);
  50.375 +    _initial_heap_byte_size = InitialHeapSize;
  50.376    }
  50.377 -  MaxHeapSize = align_size_up(MaxHeapSize, _max_alignment);
  50.378  
  50.379    // adjust max heap size if necessary
  50.380    if (NewSize + OldSize > MaxHeapSize) {
  50.381 -    if (FLAG_IS_CMDLINE(MaxHeapSize)) {
  50.382 +    if (_max_heap_size_cmdline) {
  50.383        // somebody set a maximum heap size with the intention that we should not
  50.384        // exceed it. Adjust New/OldSize as necessary.
  50.385        uintx calculated_size = NewSize + OldSize;
  50.386        double shrink_factor = (double) MaxHeapSize / calculated_size;
  50.387 -      // align
  50.388 -      NewSize = align_size_down((uintx) (NewSize * shrink_factor), _min_alignment);
  50.389 +      uintx smaller_new_size = align_size_down((uintx)(NewSize * shrink_factor), _gen_alignment);
  50.390 +      FLAG_SET_ERGO(uintx, NewSize, MAX2(young_gen_size_lower_bound(), smaller_new_size));
  50.391 +      _initial_gen0_size = NewSize;
  50.392 +
  50.393        // OldSize is already aligned because above we aligned MaxHeapSize to
  50.394 -      // _max_alignment, and we just made sure that NewSize is aligned to
  50.395 -      // _min_alignment. In initialize_flags() we verified that _max_alignment
  50.396 -      // is a multiple of _min_alignment.
  50.397 -      OldSize = MaxHeapSize - NewSize;
  50.398 +      // _heap_alignment, and we just made sure that NewSize is aligned to
  50.399 +      // _gen_alignment. In initialize_flags() we verified that _heap_alignment
  50.400 +      // is a multiple of _gen_alignment.
  50.401 +      FLAG_SET_ERGO(uintx, OldSize, MaxHeapSize - NewSize);
  50.402      } else {
  50.403 -      MaxHeapSize = NewSize + OldSize;
  50.404 +      FLAG_SET_ERGO(uintx, MaxHeapSize, align_size_up(NewSize + OldSize, _heap_alignment));
  50.405 +      _max_heap_byte_size = MaxHeapSize;
  50.406      }
  50.407    }
  50.408 -  // need to do this again
  50.409 -  MaxHeapSize = align_size_up(MaxHeapSize, _max_alignment);
  50.410 -
  50.411 -  // adjust max heap size if necessary
  50.412 -  if (NewSize + OldSize > MaxHeapSize) {
  50.413 -    if (FLAG_IS_CMDLINE(MaxHeapSize)) {
  50.414 -      // somebody set a maximum heap size with the intention that we should not
  50.415 -      // exceed it. Adjust New/OldSize as necessary.
  50.416 -      uintx calculated_size = NewSize + OldSize;
  50.417 -      double shrink_factor = (double) MaxHeapSize / calculated_size;
  50.418 -      // align
  50.419 -      NewSize = align_size_down((uintx) (NewSize * shrink_factor), _min_alignment);
  50.420 -      // OldSize is already aligned because above we aligned MaxHeapSize to
  50.421 -      // _max_alignment, and we just made sure that NewSize is aligned to
  50.422 -      // _min_alignment. In initialize_flags() we verified that _max_alignment
  50.423 -      // is a multiple of _min_alignment.
  50.424 -      OldSize = MaxHeapSize - NewSize;
  50.425 -    } else {
  50.426 -      MaxHeapSize = NewSize + OldSize;
  50.427 -    }
  50.428 -  }
  50.429 -  // need to do this again
  50.430 -  MaxHeapSize = align_size_up(MaxHeapSize, _max_alignment);
  50.431  
  50.432    always_do_update_barrier = UseConcMarkSweepGC;
  50.433  
  50.434 -  // Check validity of heap flags
  50.435 -  assert(OldSize     % _min_alignment == 0, "old space alignment");
  50.436 -  assert(MaxHeapSize % _max_alignment == 0, "maximum heap alignment");
  50.437 +  DEBUG_ONLY(TwoGenerationCollectorPolicy::assert_flags();)
  50.438  }
  50.439  
  50.440  // Values set on the command line win over any ergonomically
  50.441 @@ -281,7 +417,7 @@
  50.442  void GenCollectorPolicy::initialize_size_info() {
  50.443    CollectorPolicy::initialize_size_info();
  50.444  
  50.445 -  // _min_alignment is used for alignment within a generation.
  50.446 +  // _space_alignment is used for alignment within a generation.
  50.447    // There is additional alignment done down stream for some
  50.448    // collectors that sometimes causes unwanted rounding up of
  50.449    // generations sizes.
  50.450 @@ -289,35 +425,8 @@
  50.451    // Determine maximum size of gen0
  50.452  
  50.453    size_t max_new_size = 0;
  50.454 -  if (FLAG_IS_CMDLINE(MaxNewSize) || FLAG_IS_ERGO(MaxNewSize)) {
  50.455 -    if (MaxNewSize < _min_alignment) {
  50.456 -      max_new_size = _min_alignment;
  50.457 -    }
  50.458 -    if (MaxNewSize >= _max_heap_byte_size) {
  50.459 -      max_new_size = align_size_down(_max_heap_byte_size - _min_alignment,
  50.460 -                                     _min_alignment);
  50.461 -      warning("MaxNewSize (" SIZE_FORMAT "k) is equal to or "
  50.462 -        "greater than the entire heap (" SIZE_FORMAT "k).  A "
  50.463 -        "new generation size of " SIZE_FORMAT "k will be used.",
  50.464 -        MaxNewSize/K, _max_heap_byte_size/K, max_new_size/K);
  50.465 -    } else {
  50.466 -      max_new_size = align_size_down(MaxNewSize, _min_alignment);
  50.467 -    }
  50.468 -
  50.469 -  // The case for FLAG_IS_ERGO(MaxNewSize) could be treated
  50.470 -  // specially at this point to just use an ergonomically set
  50.471 -  // MaxNewSize to set max_new_size.  For cases with small
  50.472 -  // heaps such a policy often did not work because the MaxNewSize
  50.473 -  // was larger than the entire heap.  The interpretation given
  50.474 -  // to ergonomically set flags is that the flags are set
  50.475 -  // by different collectors for their own special needs but
  50.476 -  // are not allowed to badly shape the heap.  This allows the
  50.477 -  // different collectors to decide what's best for themselves
  50.478 -  // without having to factor in the overall heap shape.  It
  50.479 -  // can be the case in the future that the collectors would
  50.480 -  // only make "wise" ergonomics choices and this policy could
  50.481 -  // just accept those choices.  The choices currently made are
  50.482 -  // not always "wise".
  50.483 +  if (!FLAG_IS_DEFAULT(MaxNewSize)) {
  50.484 +    max_new_size = MaxNewSize;
  50.485    } else {
  50.486      max_new_size = scale_by_NewRatio_aligned(_max_heap_byte_size);
  50.487      // Bound the maximum size by NewSize below (since it historically
  50.488 @@ -386,11 +495,22 @@
  50.489      _min_gen0_size = MIN2(_min_gen0_size, _initial_gen0_size);
  50.490    }
  50.491  
  50.492 +  // Write back to flags if necessary
  50.493 +  if (NewSize != _initial_gen0_size) {
  50.494 +    FLAG_SET_ERGO(uintx, NewSize, _initial_gen0_size);
  50.495 +  }
  50.496 +
  50.497 +  if (MaxNewSize != _max_gen0_size) {
  50.498 +    FLAG_SET_ERGO(uintx, MaxNewSize, _max_gen0_size);
  50.499 +  }
  50.500 +
  50.501    if (PrintGCDetails && Verbose) {
  50.502      gclog_or_tty->print_cr("1: Minimum gen0 " SIZE_FORMAT "  Initial gen0 "
  50.503        SIZE_FORMAT "  Maximum gen0 " SIZE_FORMAT,
  50.504        _min_gen0_size, _initial_gen0_size, _max_gen0_size);
  50.505    }
  50.506 +
  50.507 +  DEBUG_ONLY(GenCollectorPolicy::assert_size_info();)
  50.508  }
  50.509  
  50.510  // Call this method during the sizing of the gen1 to make
  50.511 @@ -403,23 +523,18 @@
  50.512  // keeping it simple also seems a worthwhile goal.
  50.513  bool TwoGenerationCollectorPolicy::adjust_gen0_sizes(size_t* gen0_size_ptr,
  50.514                                                       size_t* gen1_size_ptr,
  50.515 -                                                     const size_t heap_size,
  50.516 -                                                     const size_t min_gen1_size) {
  50.517 +                                                     const size_t heap_size) {
  50.518    bool result = false;
  50.519  
  50.520 -  if ((*gen1_size_ptr + *gen0_size_ptr) > heap_size) {
  50.521 -    if ((heap_size < (*gen0_size_ptr + min_gen1_size)) &&
  50.522 -        (heap_size >= min_gen1_size + _min_alignment)) {
  50.523 -      // Adjust gen0 down to accommodate min_gen1_size
  50.524 -      *gen0_size_ptr = heap_size - min_gen1_size;
  50.525 -      *gen0_size_ptr =
  50.526 -        MAX2((uintx)align_size_down(*gen0_size_ptr, _min_alignment), _min_alignment);
  50.527 -      assert(*gen0_size_ptr > 0, "Min gen0 is too large");
  50.528 +  if ((*gen0_size_ptr + *gen1_size_ptr) > heap_size) {
  50.529 +    uintx smallest_new_size = young_gen_size_lower_bound();
  50.530 +    if ((heap_size < (*gen0_size_ptr + _min_gen1_size)) &&
  50.531 +        (heap_size >= _min_gen1_size + smallest_new_size)) {
  50.532 +      // Adjust gen0 down to accommodate _min_gen1_size
  50.533 +      *gen0_size_ptr = align_size_down_bounded(heap_size - _min_gen1_size, _gen_alignment);
  50.534        result = true;
  50.535      } else {
  50.536 -      *gen1_size_ptr = heap_size - *gen0_size_ptr;
  50.537 -      *gen1_size_ptr =
  50.538 -        MAX2((uintx)align_size_down(*gen1_size_ptr, _min_alignment), _min_alignment);
  50.539 +      *gen1_size_ptr = align_size_down_bounded(heap_size - *gen0_size_ptr, _gen_alignment);
  50.540      }
  50.541    }
  50.542    return result;
  50.543 @@ -440,41 +555,36 @@
  50.544    // The maximum gen1 size can be determined from the maximum gen0
  50.545    // and maximum heap size since no explicit flags exits
  50.546    // for setting the gen1 maximum.
  50.547 -  _max_gen1_size = _max_heap_byte_size - _max_gen0_size;
  50.548 -  _max_gen1_size =
  50.549 -    MAX2((uintx)align_size_down(_max_gen1_size, _min_alignment), _min_alignment);
  50.550 +  _max_gen1_size = MAX2(_max_heap_byte_size - _max_gen0_size, _gen_alignment);
  50.551 +
  50.552    // If no explicit command line flag has been set for the
  50.553    // gen1 size, use what is left for gen1.
  50.554 -  if (FLAG_IS_DEFAULT(OldSize) || FLAG_IS_ERGO(OldSize)) {
  50.555 -    // The user has not specified any value or ergonomics
  50.556 -    // has chosen a value (which may or may not be consistent
  50.557 +  if (!FLAG_IS_CMDLINE(OldSize)) {
  50.558 +    // The user has not specified any value but the ergonomics
  50.559 +    // may have chosen a value (which may or may not be consistent
  50.560      // with the overall heap size).  In either case make
  50.561      // the minimum, maximum and initial sizes consistent
  50.562      // with the gen0 sizes and the overall heap sizes.
  50.563 -    assert(_min_heap_byte_size > _min_gen0_size,
  50.564 -      "gen0 has an unexpected minimum size");
  50.565 -    _min_gen1_size = _min_heap_byte_size - _min_gen0_size;
  50.566 -    _min_gen1_size =
  50.567 -      MAX2((uintx)align_size_down(_min_gen1_size, _min_alignment), _min_alignment);
  50.568 -    _initial_gen1_size = _initial_heap_byte_size - _initial_gen0_size;
  50.569 -    _initial_gen1_size =
  50.570 -      MAX2((uintx)align_size_down(_initial_gen1_size, _min_alignment), _min_alignment);
  50.571 +    _min_gen1_size = MAX2(_min_heap_byte_size - _min_gen0_size, _gen_alignment);
  50.572 +    _initial_gen1_size = MAX2(_initial_heap_byte_size - _initial_gen0_size, _gen_alignment);
  50.573 +    // _max_gen1_size has already been made consistent above
  50.574 +    FLAG_SET_ERGO(uintx, OldSize, _initial_gen1_size);
  50.575    } else {
  50.576      // It's been explicitly set on the command line.  Use the
  50.577      // OldSize and then determine the consequences.
  50.578 -    _min_gen1_size = OldSize;
  50.579 +    _min_gen1_size = MIN2(OldSize, _min_heap_byte_size - _min_gen0_size);
  50.580      _initial_gen1_size = OldSize;
  50.581  
  50.582      // If the user has explicitly set an OldSize that is inconsistent
  50.583      // with other command line flags, issue a warning.
  50.584      // The generation minimums and the overall heap mimimum should
  50.585 -    // be within one heap alignment.
  50.586 -    if ((_min_gen1_size + _min_gen0_size + _min_alignment) < _min_heap_byte_size) {
  50.587 +    // be within one generation alignment.
  50.588 +    if ((_min_gen1_size + _min_gen0_size + _gen_alignment) < _min_heap_byte_size) {
  50.589        warning("Inconsistency between minimum heap size and minimum "
  50.590                "generation sizes: using minimum heap = " SIZE_FORMAT,
  50.591                _min_heap_byte_size);
  50.592      }
  50.593 -    if ((OldSize > _max_gen1_size)) {
  50.594 +    if (OldSize > _max_gen1_size) {
  50.595        warning("Inconsistency between maximum heap size and maximum "
  50.596                "generation sizes: using maximum heap = " SIZE_FORMAT
  50.597                " -XX:OldSize flag is being ignored",
  50.598 @@ -482,8 +592,7 @@
  50.599      }
  50.600      // If there is an inconsistency between the OldSize and the minimum and/or
  50.601      // initial size of gen0, since OldSize was explicitly set, OldSize wins.
  50.602 -    if (adjust_gen0_sizes(&_min_gen0_size, &_min_gen1_size,
  50.603 -                          _min_heap_byte_size, OldSize)) {
  50.604 +    if (adjust_gen0_sizes(&_min_gen0_size, &_min_gen1_size, _min_heap_byte_size)) {
  50.605        if (PrintGCDetails && Verbose) {
  50.606          gclog_or_tty->print_cr("2: Minimum gen0 " SIZE_FORMAT "  Initial gen0 "
  50.607                SIZE_FORMAT "  Maximum gen0 " SIZE_FORMAT,
  50.608 @@ -492,7 +601,7 @@
  50.609      }
  50.610      // Initial size
  50.611      if (adjust_gen0_sizes(&_initial_gen0_size, &_initial_gen1_size,
  50.612 -                          _initial_heap_byte_size, OldSize)) {
  50.613 +                          _initial_heap_byte_size)) {
  50.614        if (PrintGCDetails && Verbose) {
  50.615          gclog_or_tty->print_cr("3: Minimum gen0 " SIZE_FORMAT "  Initial gen0 "
  50.616            SIZE_FORMAT "  Maximum gen0 " SIZE_FORMAT,
  50.617 @@ -507,11 +616,26 @@
  50.618    _initial_gen1_size = MAX2(_initial_gen1_size, _min_gen1_size);
  50.619    _initial_gen1_size = MIN2(_initial_gen1_size, _max_gen1_size);
  50.620  
  50.621 +  // Write back to flags if necessary
  50.622 +  if (NewSize != _initial_gen0_size) {
  50.623 +    FLAG_SET_ERGO(uintx, NewSize, _initial_gen0_size);
  50.624 +  }
  50.625 +
  50.626 +  if (MaxNewSize != _max_gen0_size) {
  50.627 +    FLAG_SET_ERGO(uintx, MaxNewSize, _max_gen0_size);
  50.628 +  }
  50.629 +
  50.630 +  if (OldSize != _initial_gen1_size) {
  50.631 +    FLAG_SET_ERGO(uintx, OldSize, _initial_gen1_size);
  50.632 +  }
  50.633 +
  50.634    if (PrintGCDetails && Verbose) {
  50.635      gclog_or_tty->print_cr("Minimum gen1 " SIZE_FORMAT "  Initial gen1 "
  50.636        SIZE_FORMAT "  Maximum gen1 " SIZE_FORMAT,
  50.637        _min_gen1_size, _initial_gen1_size, _max_gen1_size);
  50.638    }
  50.639 +
  50.640 +  DEBUG_ONLY(TwoGenerationCollectorPolicy::assert_size_info();)
  50.641  }
  50.642  
  50.643  HeapWord* GenCollectorPolicy::mem_allocate_work(size_t size,
  50.644 @@ -605,9 +729,7 @@
  50.645        gc_count_before = Universe::heap()->total_collections();
  50.646      }
  50.647  
  50.648 -    VM_GenCollectForAllocation op(size,
  50.649 -                                  is_tlab,
  50.650 -                                  gc_count_before);
  50.651 +    VM_GenCollectForAllocation op(size, is_tlab, gc_count_before);
  50.652      VMThread::execute(&op);
  50.653      if (op.prologue_succeeded()) {
  50.654        result = op.result();
  50.655 @@ -836,14 +958,16 @@
  50.656  // MarkSweepPolicy methods
  50.657  //
  50.658  
  50.659 -MarkSweepPolicy::MarkSweepPolicy() {
  50.660 -  initialize_all();
  50.661 +void MarkSweepPolicy::initialize_alignments() {
  50.662 +  _space_alignment = _gen_alignment = (uintx)Generation::GenGrain;
  50.663 +  _heap_alignment = compute_heap_alignment();
  50.664  }
  50.665  
  50.666  void MarkSweepPolicy::initialize_generations() {
  50.667    _generations = NEW_C_HEAP_ARRAY3(GenerationSpecPtr, number_of_generations(), mtGC, 0, AllocFailStrategy::RETURN_NULL);
  50.668 -  if (_generations == NULL)
  50.669 +  if (_generations == NULL) {
  50.670      vm_exit_during_initialization("Unable to allocate gen spec");
  50.671 +  }
  50.672  
  50.673    if (UseParNewGC) {
  50.674      _generations[0] = new GenerationSpec(Generation::ParNew, _initial_gen0_size, _max_gen0_size);
  50.675 @@ -852,8 +976,9 @@
  50.676    }
  50.677    _generations[1] = new GenerationSpec(Generation::MarkSweepCompact, _initial_gen1_size, _max_gen1_size);
  50.678  
  50.679 -  if (_generations[0] == NULL || _generations[1] == NULL)
  50.680 +  if (_generations[0] == NULL || _generations[1] == NULL) {
  50.681      vm_exit_during_initialization("Unable to allocate gen spec");
  50.682 +  }
  50.683  }
  50.684  
  50.685  void MarkSweepPolicy::initialize_gc_policy_counters() {
    51.1 --- a/src/share/vm/memory/collectorPolicy.hpp	Wed Nov 20 11:08:09 2013 -0800
    51.2 +++ b/src/share/vm/memory/collectorPolicy.hpp	Thu Nov 21 12:30:35 2013 -0800
    51.3 @@ -61,17 +61,23 @@
    51.4   protected:
    51.5    GCPolicyCounters* _gc_policy_counters;
    51.6  
    51.7 -  // Requires that the concrete subclass sets the alignment constraints
    51.8 -  // before calling.
    51.9 +  virtual void initialize_alignments() = 0;
   51.10    virtual void initialize_flags();
   51.11    virtual void initialize_size_info();
   51.12  
   51.13 +  DEBUG_ONLY(virtual void assert_flags();)
   51.14 +  DEBUG_ONLY(virtual void assert_size_info();)
   51.15 +
   51.16    size_t _initial_heap_byte_size;
   51.17    size_t _max_heap_byte_size;
   51.18    size_t _min_heap_byte_size;
   51.19  
   51.20 -  size_t _min_alignment;
   51.21 -  size_t _max_alignment;
   51.22 +  size_t _space_alignment;
   51.23 +  size_t _heap_alignment;
   51.24 +
   51.25 +  // Needed to keep information if MaxHeapSize was set on the command line
   51.26 +  // when the flag value is aligned etc by ergonomics
   51.27 +  bool _max_heap_size_cmdline;
   51.28  
   51.29    // The sizing of the heap are controlled by a sizing policy.
   51.30    AdaptiveSizePolicy* _size_policy;
   51.31 @@ -79,6 +85,7 @@
   51.32    // Set to true when policy wants soft refs cleared.
   51.33    // Reset to false by gc after it clears all soft refs.
   51.34    bool _should_clear_all_soft_refs;
   51.35 +
   51.36    // Set to true by the GC if the just-completed gc cleared all
   51.37    // softrefs.  This is set to true whenever a gc clears all softrefs, and
   51.38    // set to false each time gc returns to the mutator.  For example, in the
   51.39 @@ -86,23 +93,20 @@
   51.40    // mem_allocate() where it returns op.result()
   51.41    bool _all_soft_refs_clear;
   51.42  
   51.43 -  CollectorPolicy() :
   51.44 -    _min_alignment(1),
   51.45 -    _max_alignment(1),
   51.46 -    _initial_heap_byte_size(0),
   51.47 -    _max_heap_byte_size(0),
   51.48 -    _min_heap_byte_size(0),
   51.49 -    _size_policy(NULL),
   51.50 -    _should_clear_all_soft_refs(false),
   51.51 -    _all_soft_refs_clear(false)
   51.52 -  {}
   51.53 +  CollectorPolicy();
   51.54  
   51.55   public:
   51.56 +  virtual void initialize_all() {
   51.57 +    initialize_alignments();
   51.58 +    initialize_flags();
   51.59 +    initialize_size_info();
   51.60 +  }
   51.61 +
   51.62    // Return maximum heap alignment that may be imposed by the policy
   51.63 -  static size_t compute_max_alignment();
   51.64 +  static size_t compute_heap_alignment();
   51.65  
   51.66 -  size_t min_alignment()                       { return _min_alignment; }
   51.67 -  size_t max_alignment()                       { return _max_alignment; }
   51.68 +  size_t space_alignment()        { return _space_alignment; }
   51.69 +  size_t heap_alignment()         { return _heap_alignment; }
   51.70  
   51.71    size_t initial_heap_byte_size() { return _initial_heap_byte_size; }
   51.72    size_t max_heap_byte_size()     { return _max_heap_byte_size; }
   51.73 @@ -151,7 +155,6 @@
   51.74  
   51.75  
   51.76    virtual BarrierSet::Name barrier_set_name() = 0;
   51.77 -  virtual GenRemSet::Name  rem_set_name() = 0;
   51.78  
   51.79    // Create the remembered set (to cover the given reserved region,
   51.80    // allowing breaking up into at most "max_covered_regions").
   51.81 @@ -195,6 +198,9 @@
   51.82      return false;
   51.83    }
   51.84  
   51.85 +  // Do any updates required to global flags that are due to heap initialization
   51.86 +  // changes
   51.87 +  virtual void post_heap_initialize() = 0;
   51.88  };
   51.89  
   51.90  class ClearedAllSoftRefs : public StackObj {
   51.91 @@ -219,6 +225,10 @@
   51.92    size_t _initial_gen0_size;
   51.93    size_t _max_gen0_size;
   51.94  
   51.95 +  // _gen_alignment and _space_alignment will have the same value most of the
   51.96 +  // time. When using large pages they can differ.
   51.97 +  size_t _gen_alignment;
   51.98 +
   51.99    GenerationSpec **_generations;
  51.100  
  51.101    // Return true if an allocation should be attempted in the older
  51.102 @@ -229,41 +239,50 @@
  51.103    void initialize_flags();
  51.104    void initialize_size_info();
  51.105  
  51.106 +  DEBUG_ONLY(void assert_flags();)
  51.107 +  DEBUG_ONLY(void assert_size_info();)
  51.108 +
  51.109    // Try to allocate space by expanding the heap.
  51.110    virtual HeapWord* expand_heap_and_allocate(size_t size, bool is_tlab);
  51.111  
  51.112 - // Scale the base_size by NewRation according to
  51.113 +  // Compute max heap alignment
  51.114 +  size_t compute_max_alignment();
  51.115 +
  51.116 + // Scale the base_size by NewRatio according to
  51.117   //     result = base_size / (NewRatio + 1)
  51.118   // and align by min_alignment()
  51.119   size_t scale_by_NewRatio_aligned(size_t base_size);
  51.120  
  51.121 - // Bound the value by the given maximum minus the
  51.122 - // min_alignment.
  51.123 + // Bound the value by the given maximum minus the min_alignment
  51.124   size_t bound_minus_alignment(size_t desired_size, size_t maximum_size);
  51.125  
  51.126   public:
  51.127 +  GenCollectorPolicy();
  51.128 +
  51.129    // Accessors
  51.130    size_t min_gen0_size()     { return _min_gen0_size; }
  51.131    size_t initial_gen0_size() { return _initial_gen0_size; }
  51.132    size_t max_gen0_size()     { return _max_gen0_size; }
  51.133 +  size_t gen_alignment()     { return _gen_alignment; }
  51.134  
  51.135    virtual int number_of_generations() = 0;
  51.136  
  51.137 -  virtual GenerationSpec **generations()       {
  51.138 +  virtual GenerationSpec **generations() {
  51.139      assert(_generations != NULL, "Sanity check");
  51.140      return _generations;
  51.141    }
  51.142  
  51.143    virtual GenCollectorPolicy* as_generation_policy() { return this; }
  51.144  
  51.145 -  virtual void initialize_generations() = 0;
  51.146 +  virtual void initialize_generations() { };
  51.147  
  51.148    virtual void initialize_all() {
  51.149 -    initialize_flags();
  51.150 -    initialize_size_info();
  51.151 +    CollectorPolicy::initialize_all();
  51.152      initialize_generations();
  51.153    }
  51.154  
  51.155 +  size_t young_gen_size_lower_bound();
  51.156 +
  51.157    HeapWord* mem_allocate_work(size_t size,
  51.158                                bool is_tlab,
  51.159                                bool* gc_overhead_limit_was_exceeded);
  51.160 @@ -274,6 +293,10 @@
  51.161    virtual void initialize_size_policy(size_t init_eden_size,
  51.162                                        size_t init_promo_size,
  51.163                                        size_t init_survivor_size);
  51.164 +
  51.165 +  virtual void post_heap_initialize() {
  51.166 +    assert(_max_gen0_size == MaxNewSize, "Should be taken care of by initialize_size_info");
  51.167 +  }
  51.168  };
  51.169  
  51.170  // All of hotspot's current collectors are subtypes of this
  51.171 @@ -290,9 +313,14 @@
  51.172  
  51.173    void initialize_flags();
  51.174    void initialize_size_info();
  51.175 -  void initialize_generations()                { ShouldNotReachHere(); }
  51.176 +
  51.177 +  DEBUG_ONLY(void assert_flags();)
  51.178 +  DEBUG_ONLY(void assert_size_info();)
  51.179  
  51.180   public:
  51.181 +  TwoGenerationCollectorPolicy() : GenCollectorPolicy(), _min_gen1_size(0),
  51.182 +    _initial_gen1_size(0), _max_gen1_size(0) {}
  51.183 +
  51.184    // Accessors
  51.185    size_t min_gen1_size()     { return _min_gen1_size; }
  51.186    size_t initial_gen1_size() { return _initial_gen1_size; }
  51.187 @@ -301,25 +329,25 @@
  51.188    // Inherited methods
  51.189    TwoGenerationCollectorPolicy* as_two_generation_policy() { return this; }
  51.190  
  51.191 -  int number_of_generations()                  { return 2; }
  51.192 -  BarrierSet::Name barrier_set_name()          { return BarrierSet::CardTableModRef; }
  51.193 -  GenRemSet::Name rem_set_name()               { return GenRemSet::CardTable; }
  51.194 +  int number_of_generations()          { return 2; }
  51.195 +  BarrierSet::Name barrier_set_name()  { return BarrierSet::CardTableModRef; }
  51.196  
  51.197    virtual CollectorPolicy::Name kind() {
  51.198      return CollectorPolicy::TwoGenerationCollectorPolicyKind;
  51.199    }
  51.200  
  51.201 -  // Returns true is gen0 sizes were adjusted
  51.202 +  // Returns true if gen0 sizes were adjusted
  51.203    bool adjust_gen0_sizes(size_t* gen0_size_ptr, size_t* gen1_size_ptr,
  51.204 -                         const size_t heap_size, const size_t min_gen1_size);
  51.205 +                         const size_t heap_size);
  51.206  };
  51.207  
  51.208  class MarkSweepPolicy : public TwoGenerationCollectorPolicy {
  51.209   protected:
  51.210 +  void initialize_alignments();
  51.211    void initialize_generations();
  51.212  
  51.213   public:
  51.214 -  MarkSweepPolicy();
  51.215 +  MarkSweepPolicy() {}
  51.216  
  51.217    MarkSweepPolicy* as_mark_sweep_policy() { return this; }
  51.218  
    52.1 --- a/src/share/vm/memory/defNewGeneration.cpp	Wed Nov 20 11:08:09 2013 -0800
    52.2 +++ b/src/share/vm/memory/defNewGeneration.cpp	Thu Nov 21 12:30:35 2013 -0800
    52.3 @@ -204,7 +204,7 @@
    52.4    // Compute the maximum eden and survivor space sizes. These sizes
    52.5    // are computed assuming the entire reserved space is committed.
    52.6    // These values are exported as performance counters.
    52.7 -  uintx alignment = GenCollectedHeap::heap()->collector_policy()->min_alignment();
    52.8 +  uintx alignment = GenCollectedHeap::heap()->collector_policy()->space_alignment();
    52.9    uintx size = _virtual_space.reserved_size();
   52.10    _max_survivor_size = compute_survivor_size(size, alignment);
   52.11    _max_eden_size = size - (2*_max_survivor_size);
   52.12 @@ -235,7 +235,7 @@
   52.13                                                  bool clear_space,
   52.14                                                  bool mangle_space) {
   52.15    uintx alignment =
   52.16 -    GenCollectedHeap::heap()->collector_policy()->min_alignment();
   52.17 +    GenCollectedHeap::heap()->collector_policy()->space_alignment();
   52.18  
   52.19    // If the spaces are being cleared (only done at heap initialization
   52.20    // currently), the survivor spaces need not be empty.
   52.21 @@ -473,7 +473,7 @@
   52.22  }
   52.23  
   52.24  size_t DefNewGeneration::max_capacity() const {
   52.25 -  const size_t alignment = GenCollectedHeap::heap()->collector_policy()->min_alignment();
   52.26 +  const size_t alignment = GenCollectedHeap::heap()->collector_policy()->space_alignment();
   52.27    const size_t reserved_bytes = reserved().byte_size();
   52.28    return reserved_bytes - compute_survivor_size(reserved_bytes, alignment);
   52.29  }
    53.1 --- a/src/share/vm/memory/genCollectedHeap.cpp	Wed Nov 20 11:08:09 2013 -0800
    53.2 +++ b/src/share/vm/memory/genCollectedHeap.cpp	Thu Nov 21 12:30:35 2013 -0800
    53.3 @@ -111,7 +111,7 @@
    53.4    int n_covered_regions = 0;
    53.5    ReservedSpace heap_rs;
    53.6  
    53.7 -  size_t heap_alignment = collector_policy()->max_alignment();
    53.8 +  size_t heap_alignment = collector_policy()->heap_alignment();
    53.9  
   53.10    heap_address = allocate(heap_alignment, &total_reserved,
   53.11                            &n_covered_regions, &heap_rs);
   53.12 @@ -1053,12 +1053,6 @@
   53.13    }
   53.14  }
   53.15  
   53.16 -void GenCollectedHeap::compute_new_generation_sizes(int collectedGen) {
   53.17 -  for (int i = 0; i <= collectedGen; i++) {
   53.18 -    _gens[i]->compute_new_size();
   53.19 -  }
   53.20 -}
   53.21 -
   53.22  GenCollectedHeap* GenCollectedHeap::heap() {
   53.23    assert(_gch != NULL, "Uninitialized access to GenCollectedHeap::heap()");
   53.24    assert(_gch->kind() == CollectedHeap::GenCollectedHeap, "not a generational heap");
    54.1 --- a/src/share/vm/memory/genCollectedHeap.hpp	Wed Nov 20 11:08:09 2013 -0800
    54.2 +++ b/src/share/vm/memory/genCollectedHeap.hpp	Thu Nov 21 12:30:35 2013 -0800
    54.3 @@ -86,10 +86,6 @@
    54.4    NOT_PRODUCT(static size_t _skip_header_HeapWords;)
    54.5  
    54.6  protected:
    54.7 -  // Directs each generation up to and including "collectedGen" to recompute
    54.8 -  // its desired size.
    54.9 -  void compute_new_generation_sizes(int collectedGen);
   54.10 -
   54.11    // Helper functions for allocation
   54.12    HeapWord* attempt_allocation(size_t size,
   54.13                                 bool   is_tlab,
    55.1 --- a/src/share/vm/memory/metaspace.cpp	Wed Nov 20 11:08:09 2013 -0800
    55.2 +++ b/src/share/vm/memory/metaspace.cpp	Thu Nov 21 12:30:35 2013 -0800
    55.3 @@ -2869,7 +2869,7 @@
    55.4  
    55.5    Universe::set_narrow_klass_base(lower_base);
    55.6  
    55.7 -  if ((uint64_t)(higher_address - lower_base) < UnscaledClassSpaceMax) {
    55.8 +  if ((uint64_t)(higher_address - lower_base) <= UnscaledClassSpaceMax) {
    55.9      Universe::set_narrow_klass_shift(0);
   55.10    } else {
   55.11      assert(!UseSharedSpaces, "Cannot shift with UseSharedSpaces");
   55.12 @@ -2885,7 +2885,7 @@
   55.13    address lower_base = MIN2((address)metaspace_base, cds_base);
   55.14    address higher_address = MAX2((address)(cds_base + FileMapInfo::shared_spaces_size()),
   55.15                                  (address)(metaspace_base + compressed_class_space_size()));
   55.16 -  return ((uint64_t)(higher_address - lower_base) < UnscaledClassSpaceMax);
   55.17 +  return ((uint64_t)(higher_address - lower_base) <= UnscaledClassSpaceMax);
   55.18  }
   55.19  
   55.20  // Try to allocate the metaspace at the requested addr.
   55.21 @@ -2975,11 +2975,6 @@
   55.22  
   55.23  #endif
   55.24  
   55.25 -// Align down. If the aligning result in 0, return 'alignment'.
   55.26 -static size_t restricted_align_down(size_t size, size_t alignment) {
   55.27 -  return MAX2(alignment, align_size_down_(size, alignment));
   55.28 -}
   55.29 -
   55.30  void Metaspace::ergo_initialize() {
   55.31    if (DumpSharedSpaces) {
   55.32      // Using large pages when dumping the shared archive is currently not implemented.
   55.33 @@ -3002,13 +2997,13 @@
   55.34    // Ideally, we would be able to set the default value of MaxMetaspaceSize in
   55.35    // globals.hpp to the aligned value, but this is not possible, since the
   55.36    // alignment depends on other flags being parsed.
   55.37 -  MaxMetaspaceSize = restricted_align_down(MaxMetaspaceSize, _reserve_alignment);
   55.38 +  MaxMetaspaceSize = align_size_down_bounded(MaxMetaspaceSize, _reserve_alignment);
   55.39  
   55.40    if (MetaspaceSize > MaxMetaspaceSize) {
   55.41      MetaspaceSize = MaxMetaspaceSize;
   55.42    }
   55.43  
   55.44 -  MetaspaceSize = restricted_align_down(MetaspaceSize, _commit_alignment);
   55.45 +  MetaspaceSize = align_size_down_bounded(MetaspaceSize, _commit_alignment);
   55.46  
   55.47    assert(MetaspaceSize <= MaxMetaspaceSize, "MetaspaceSize should be limited by MaxMetaspaceSize");
   55.48  
   55.49 @@ -3016,10 +3011,10 @@
   55.50      vm_exit_during_initialization("Too small initial Metaspace size");
   55.51    }
   55.52  
   55.53 -  MinMetaspaceExpansion = restricted_align_down(MinMetaspaceExpansion, _commit_alignment);
   55.54 -  MaxMetaspaceExpansion = restricted_align_down(MaxMetaspaceExpansion, _commit_alignment);
   55.55 -
   55.56 -  CompressedClassSpaceSize = restricted_align_down(CompressedClassSpaceSize, _reserve_alignment);
   55.57 +  MinMetaspaceExpansion = align_size_down_bounded(MinMetaspaceExpansion, _commit_alignment);
   55.58 +  MaxMetaspaceExpansion = align_size_down_bounded(MaxMetaspaceExpansion, _commit_alignment);
   55.59 +
   55.60 +  CompressedClassSpaceSize = align_size_down_bounded(CompressedClassSpaceSize, _reserve_alignment);
   55.61    set_compressed_class_space_size(CompressedClassSpaceSize);
   55.62  }
   55.63  
    56.1 --- a/src/share/vm/memory/sharedHeap.cpp	Wed Nov 20 11:08:09 2013 -0800
    56.2 +++ b/src/share/vm/memory/sharedHeap.cpp	Thu Nov 21 12:30:35 2013 -0800
    56.3 @@ -247,6 +247,7 @@
    56.4  }
    56.5  
    56.6  void SharedHeap::post_initialize() {
    56.7 +  CollectedHeap::post_initialize();
    56.8    ref_processing_init();
    56.9  }
   56.10  
    57.1 --- a/src/share/vm/memory/universe.cpp	Wed Nov 20 11:08:09 2013 -0800
    57.2 +++ b/src/share/vm/memory/universe.cpp	Thu Nov 21 12:30:35 2013 -0800
    57.3 @@ -785,6 +785,7 @@
    57.4    } else if (UseG1GC) {
    57.5  #if INCLUDE_ALL_GCS
    57.6      G1CollectorPolicy* g1p = new G1CollectorPolicy();
    57.7 +    g1p->initialize_all();
    57.8      G1CollectedHeap* g1h = new G1CollectedHeap(g1p);
    57.9      Universe::_collectedHeap = g1h;
   57.10  #else  // INCLUDE_ALL_GCS
   57.11 @@ -809,6 +810,7 @@
   57.12      } else { // default old generation
   57.13        gc_policy = new MarkSweepPolicy();
   57.14      }
   57.15 +    gc_policy->initialize_all();
   57.16  
   57.17      Universe::_collectedHeap = new GenCollectedHeap(gc_policy);
   57.18    }
   57.19 @@ -1046,7 +1048,7 @@
   57.20      Universe::_virtual_machine_error_instance =
   57.21        InstanceKlass::cast(k)->allocate_instance(CHECK_false);
   57.22  
   57.23 -    Universe::_vm_exception               = InstanceKlass::cast(k)->allocate_instance(CHECK_false);
   57.24 +    Universe::_vm_exception = InstanceKlass::cast(k)->allocate_instance(CHECK_false);
   57.25  
   57.26    if (!DumpSharedSpaces) {
   57.27      // These are the only Java fields that are currently set during shared space dumping.
    58.1 --- a/src/share/vm/oops/cpCache.cpp	Wed Nov 20 11:08:09 2013 -0800
    58.2 +++ b/src/share/vm/oops/cpCache.cpp	Thu Nov 21 12:30:35 2013 -0800
    58.3 @@ -554,24 +554,37 @@
    58.4  // Implementation of ConstantPoolCache
    58.5  
    58.6  ConstantPoolCache* ConstantPoolCache::allocate(ClassLoaderData* loader_data,
    58.7 -                                     int length,
    58.8                                       const intStack& index_map,
    58.9 +                                     const intStack& invokedynamic_index_map,
   58.10                                       const intStack& invokedynamic_map, TRAPS) {
   58.11 +
   58.12 +  const int length = index_map.length() + invokedynamic_index_map.length();
   58.13    int size = ConstantPoolCache::size(length);
   58.14  
   58.15    return new (loader_data, size, false, MetaspaceObj::ConstantPoolCacheType, THREAD)
   58.16 -    ConstantPoolCache(length, index_map, invokedynamic_map);
   58.17 +    ConstantPoolCache(length, index_map, invokedynamic_index_map, invokedynamic_map);
   58.18  }
   58.19  
   58.20  void ConstantPoolCache::initialize(const intArray& inverse_index_map,
   58.21 +                                   const intArray& invokedynamic_inverse_index_map,
   58.22                                     const intArray& invokedynamic_references_map) {
   58.23 -  assert(inverse_index_map.length() == length(), "inverse index map must have same length as cache");
   58.24 -  for (int i = 0; i < length(); i++) {
   58.25 +  for (int i = 0; i < inverse_index_map.length(); i++) {
   58.26      ConstantPoolCacheEntry* e = entry_at(i);
   58.27      int original_index = inverse_index_map[i];
   58.28      e->initialize_entry(original_index);
   58.29      assert(entry_at(i) == e, "sanity");
   58.30    }
   58.31 +
   58.32 +  // Append invokedynamic entries at the end
   58.33 +  int invokedynamic_offset = inverse_index_map.length();
   58.34 +  for (int i = 0; i < invokedynamic_inverse_index_map.length(); i++) {
   58.35 +    int offset = i + invokedynamic_offset;
   58.36 +    ConstantPoolCacheEntry* e = entry_at(offset);
   58.37 +    int original_index = invokedynamic_inverse_index_map[i];
   58.38 +    e->initialize_entry(original_index);
   58.39 +    assert(entry_at(offset) == e, "sanity");
   58.40 +  }
   58.41 +
   58.42    for (int ref = 0; ref < invokedynamic_references_map.length(); ref++) {
   58.43      const int cpci = invokedynamic_references_map[ref];
   58.44      if (cpci >= 0) {
    59.1 --- a/src/share/vm/oops/cpCache.hpp	Wed Nov 20 11:08:09 2013 -0800
    59.2 +++ b/src/share/vm/oops/cpCache.hpp	Thu Nov 21 12:30:35 2013 -0800
    59.3 @@ -31,6 +31,10 @@
    59.4  
    59.5  class PSPromotionManager;
    59.6  
    59.7 +// The ConstantPoolCache is not a cache! It is the resolution table that the
    59.8 +// interpreter uses to avoid going into the runtime and a way to access resolved
    59.9 +// values.
   59.10 +
   59.11  // A ConstantPoolCacheEntry describes an individual entry of the constant
   59.12  // pool cache. There's 2 principal kinds of entries: field entries for in-
   59.13  // stance & static field access, and method entries for invokes. Some of
   59.14 @@ -392,26 +396,33 @@
   59.15    friend class MetadataFactory;
   59.16   private:
   59.17    int             _length;
   59.18 -  ConstantPool* _constant_pool;                // the corresponding constant pool
   59.19 +  ConstantPool*   _constant_pool;          // the corresponding constant pool
   59.20  
   59.21    // Sizing
   59.22    debug_only(friend class ClassVerifier;)
   59.23  
   59.24    // Constructor
   59.25 -  ConstantPoolCache(int length, const intStack& inverse_index_map,
   59.26 +  ConstantPoolCache(int length,
   59.27 +                    const intStack& inverse_index_map,
   59.28 +                    const intStack& invokedynamic_inverse_index_map,
   59.29                      const intStack& invokedynamic_references_map) :
   59.30 -                                        _length(length), _constant_pool(NULL) {
   59.31 -    initialize(inverse_index_map, invokedynamic_references_map);
   59.32 +                          _length(length),
   59.33 +                          _constant_pool(NULL) {
   59.34 +    initialize(inverse_index_map, invokedynamic_inverse_index_map,
   59.35 +               invokedynamic_references_map);
   59.36      for (int i = 0; i < length; i++) {
   59.37        assert(entry_at(i)->is_f1_null(), "Failed to clear?");
   59.38      }
   59.39    }
   59.40  
   59.41    // Initialization
   59.42 -  void initialize(const intArray& inverse_index_map, const intArray& invokedynamic_references_map);
   59.43 +  void initialize(const intArray& inverse_index_map,
   59.44 +                  const intArray& invokedynamic_inverse_index_map,
   59.45 +                  const intArray& invokedynamic_references_map);
   59.46   public:
   59.47 -  static ConstantPoolCache* allocate(ClassLoaderData* loader_data, int length,
   59.48 -                                     const intStack& inverse_index_map,
   59.49 +  static ConstantPoolCache* allocate(ClassLoaderData* loader_data,
   59.50 +                                     const intStack& cp_cache_map,
   59.51 +                                     const intStack& invokedynamic_cp_cache_map,
   59.52                                       const intStack& invokedynamic_references_map, TRAPS);
   59.53    bool is_constantPoolCache() const { return true; }
   59.54  
    60.1 --- a/src/share/vm/oops/instanceKlass.cpp	Wed Nov 20 11:08:09 2013 -0800
    60.2 +++ b/src/share/vm/oops/instanceKlass.cpp	Thu Nov 21 12:30:35 2013 -0800
    60.3 @@ -2211,6 +2211,10 @@
    60.4             data = mdo->next_data(data)) {
    60.5          data->clean_weak_klass_links(is_alive);
    60.6        }
    60.7 +      ParametersTypeData* parameters = mdo->parameters_type_data();
    60.8 +      if (parameters != NULL) {
    60.9 +        parameters->clean_weak_klass_links(is_alive);
   60.10 +      }
   60.11      }
   60.12    }
   60.13  }
    61.1 --- a/src/share/vm/oops/klassVtable.cpp	Wed Nov 20 11:08:09 2013 -0800
    61.2 +++ b/src/share/vm/oops/klassVtable.cpp	Thu Nov 21 12:30:35 2013 -0800
    61.3 @@ -86,7 +86,11 @@
    61.4    get_mirandas(&new_mirandas, all_mirandas, super, methods, NULL, local_interfaces);
    61.5    *num_new_mirandas = new_mirandas.length();
    61.6  
    61.7 -  vtable_length += *num_new_mirandas * vtableEntry::size();
    61.8 +  // Interfaces do not need interface methods in their vtables
    61.9 +  // This includes miranda methods and during later processing, default methods
   61.10 +  if (!class_flags.is_interface()) {
   61.11 +    vtable_length += *num_new_mirandas * vtableEntry::size();
   61.12 +  }
   61.13  
   61.14    if (Universe::is_bootstrapping() && vtable_length == 0) {
   61.15      // array classes don't have their superclass set correctly during
   61.16 @@ -224,7 +228,11 @@
   61.17      }
   61.18  
   61.19      // add miranda methods; it will also return the updated initialized
   61.20 -    initialized = fill_in_mirandas(initialized);
   61.21 +    // Interfaces do not need interface methods in their vtables
   61.22 +    // This includes miranda methods and during later processing, default methods
   61.23 +    if (!ik()->is_interface()) {
   61.24 +      initialized = fill_in_mirandas(initialized);
   61.25 +    }
   61.26  
   61.27      // In class hierarchies where the accessibility is not increasing (i.e., going from private ->
   61.28      // package_private -> public/protected), the vtable might actually be smaller than our initial
   61.29 @@ -264,12 +272,12 @@
   61.30             _klass->internal_name(), sig, vtable_index);
   61.31             super_method->access_flags().print_on(tty);
   61.32             if (super_method->is_default_method()) {
   61.33 -             tty->print("default");
   61.34 +             tty->print("default ");
   61.35             }
   61.36             tty->print("overriders flags: ");
   61.37             target_method->access_flags().print_on(tty);
   61.38             if (target_method->is_default_method()) {
   61.39 -             tty->print("default");
   61.40 +             tty->print("default ");
   61.41             }
   61.42          }
   61.43  #endif /*PRODUCT*/
   61.44 @@ -332,9 +340,15 @@
   61.45      // An interface never allocates new vtable slots, only inherits old ones.
   61.46      // This method will either be assigned its own itable index later,
   61.47      // or be assigned an inherited vtable index in the loop below.
   61.48 -    // default methods store their vtable indices in the inheritors default_vtable_indices
   61.49 -    assert (default_index == -1, "interfaces don't store resolved default methods");
   61.50 -    target_method()->set_vtable_index(Method::pending_itable_index);
   61.51 +    // default methods inherited by classes store their vtable indices
   61.52 +    // in the inheritor's default_vtable_indices
   61.53 +    // default methods inherited by interfaces may already have a
   61.54 +    // valid itable index, if so, don't change it
   61.55 +    // overpass methods in an interface will be assigned an itable index later
   61.56 +    // by an inheriting class
   61.57 +    if (!is_default || !target_method()->has_itable_index()) {
   61.58 +      target_method()->set_vtable_index(Method::pending_itable_index);
   61.59 +    }
   61.60    }
   61.61  
   61.62    // we need a new entry if there is no superclass
   61.63 @@ -441,7 +455,7 @@
   61.64             target_klass->internal_name(), sig, i);
   61.65             super_method->access_flags().print_on(tty);
   61.66             if (super_method->is_default_method()) {
   61.67 -             tty->print("default");
   61.68 +             tty->print("default ");
   61.69             }
   61.70             if (super_method->is_overpass()) {
   61.71               tty->print("overpass");
   61.72 @@ -449,7 +463,7 @@
   61.73             tty->print("overriders flags: ");
   61.74             target_method->access_flags().print_on(tty);
   61.75             if (target_method->is_default_method()) {
   61.76 -             tty->print("default");
   61.77 +             tty->print("default ");
   61.78             }
   61.79             if (target_method->is_overpass()) {
   61.80               tty->print("overpass");
   61.81 @@ -468,7 +482,7 @@
   61.82             target_klass->internal_name(), sig,i);
   61.83             super_method->access_flags().print_on(tty);
   61.84             if (super_method->is_default_method()) {
   61.85 -             tty->print("default");
   61.86 +             tty->print("default ");
   61.87             }
   61.88             if (super_method->is_overpass()) {
   61.89               tty->print("overpass");
   61.90 @@ -476,7 +490,7 @@
   61.91             tty->print("overriders flags: ");
   61.92             target_method->access_flags().print_on(tty);
   61.93             if (target_method->is_default_method()) {
   61.94 -             tty->print("default");
   61.95 +             tty->print("default ");
   61.96             }
   61.97             if (target_method->is_overpass()) {
   61.98               tty->print("overpass");
   61.99 @@ -494,8 +508,18 @@
  61.100  #ifndef PRODUCT
  61.101    if (PrintVtables && Verbose) {
  61.102      ResourceMark rm;
  61.103 -    tty->print_cr("adding %s::%s at index %d", _klass->internal_name(),
  61.104 -      (m != NULL) ? m->name()->as_C_string() : "<NULL>", index);
  61.105 +    const char* sig = (m != NULL) ? m->name_and_sig_as_C_string() : "<NULL>";
  61.106 +    tty->print("adding %s at index %d, flags: ", sig, index);
  61.107 +    if (m != NULL) {
  61.108 +      m->access_flags().print_on(tty);
  61.109 +      if (m->is_default_method()) {
  61.110 +        tty->print("default ");
  61.111 +      }
  61.112 +      if (m->is_overpass()) {
  61.113 +        tty->print("overpass");
  61.114 +      }
  61.115 +    }
  61.116 +    tty->cr();
  61.117    }
  61.118  #endif
  61.119    table()[index].set(m);
  61.120 @@ -631,8 +655,10 @@
  61.121    if (mhk->is_interface()) {
  61.122      assert(m->is_public(), "should be public");
  61.123      assert(ik()->implements_interface(method_holder) , "this class should implement the interface");
  61.124 -    assert(is_miranda(m, ik()->methods(), ik()->default_methods(), ik()->super()), "should be a miranda_method");
  61.125 -    return true;
  61.126 +    // the search could find a miranda or a default method
  61.127 +    if (is_miranda(m, ik()->methods(), ik()->default_methods(), ik()->super())) {
  61.128 +      return true;
  61.129 +    }
  61.130    }
  61.131    return false;
  61.132  }
  61.133 @@ -644,9 +670,10 @@
  61.134  // the caller must make sure that the method belongs to an interface implemented by the class
  61.135  // Miranda methods only include public interface instance methods
  61.136  // Not private methods, not static methods, not default == concrete abstract
  61.137 +// Miranda methods also do not include overpass methods in interfaces
  61.138  bool klassVtable::is_miranda(Method* m, Array<Method*>* class_methods,
  61.139                               Array<Method*>* default_methods, Klass* super) {
  61.140 -  if (m->is_static() || m->is_private()) {
  61.141 +  if (m->is_static() || m->is_private() || m->is_overpass()) {
  61.142      return false;
  61.143    }
  61.144    Symbol* name = m->name();
  61.145 @@ -744,6 +771,8 @@
  61.146  // Discover miranda methods ("miranda" = "interface abstract, no binding"),
  61.147  // and append them into the vtable starting at index initialized,
  61.148  // return the new value of initialized.
  61.149 +// Miranda methods use vtable entries, but do not get assigned a vtable_index
  61.150 +// The vtable_index is discovered by searching from the end of the vtable
  61.151  int klassVtable::fill_in_mirandas(int initialized) {
  61.152    GrowableArray<Method*> mirandas(20);
  61.153    get_mirandas(&mirandas, NULL, ik()->super(), ik()->methods(),
  61.154 @@ -758,7 +787,7 @@
  61.155            sig, initialized);
  61.156          meth->access_flags().print_on(tty);
  61.157          if (meth->is_default_method()) {
  61.158 -          tty->print("default");
  61.159 +          tty->print("default ");
  61.160          }
  61.161          tty->cr();
  61.162        }
  61.163 @@ -858,7 +887,7 @@
  61.164        tty->print("      (%5d)  ", i);
  61.165        m->access_flags().print_on(tty);
  61.166        if (m->is_default_method()) {
  61.167 -        tty->print("default");
  61.168 +        tty->print("default ");
  61.169        }
  61.170        if (m->is_overpass()) {
  61.171          tty->print("overpass");
  61.172 @@ -977,6 +1006,25 @@
  61.173      if (interface_method_needs_itable_index(m)) {
  61.174        assert(!m->is_final_method(), "no final interface methods");
  61.175        // If m is already assigned a vtable index, do not disturb it.
  61.176 +      if (TraceItables && Verbose) {
  61.177 +        ResourceMark rm;
  61.178 +        const char* sig = (m != NULL) ? m->name_and_sig_as_C_string() : "<NULL>";
  61.179 +        if (m->has_vtable_index()) {
  61.180 +          tty->print("itable index %d for method: %s, flags: ", m->vtable_index(), sig);
  61.181 +        } else {
  61.182 +          tty->print("itable index %d for method: %s, flags: ", ime_num, sig);
  61.183 +        }
  61.184 +        if (m != NULL) {
  61.185 +          m->access_flags().print_on(tty);
  61.186 +          if (m->is_default_method()) {
  61.187 +            tty->print("default ");
  61.188 +          }
  61.189 +          if (m->is_overpass()) {
  61.190 +            tty->print("overpass");
  61.191 +          }
  61.192 +        }
  61.193 +        tty->cr();
  61.194 +      }
  61.195        if (!m->has_vtable_index()) {
  61.196          assert(m->vtable_index() == Method::pending_itable_index, "set by initialize_vtable");
  61.197          m->set_itable_index(ime_num);
  61.198 @@ -1079,7 +1127,7 @@
  61.199            tty->print("target_method flags: ");
  61.200            target()->access_flags().print_on(tty);
  61.201            if (target()->is_default_method()) {
  61.202 -            tty->print("default");
  61.203 +            tty->print("default ");
  61.204            }
  61.205            tty->cr();
  61.206          }
  61.207 @@ -1158,7 +1206,7 @@
  61.208        tty->print("      (%5d)  ", i);
  61.209        m->access_flags().print_on(tty);
  61.210        if (m->is_default_method()) {
  61.211 -        tty->print("default");
  61.212 +        tty->print("default ");
  61.213        }
  61.214        tty->print(" --  ");
  61.215        m->print_name(tty);
    62.1 --- a/src/share/vm/oops/methodData.cpp	Wed Nov 20 11:08:09 2013 -0800
    62.2 +++ b/src/share/vm/oops/methodData.cpp	Thu Nov 21 12:30:35 2013 -0800
    62.3 @@ -275,23 +275,23 @@
    62.4  }
    62.5  
    62.6  bool TypeEntries::is_loader_alive(BoolObjectClosure* is_alive_cl, intptr_t p) {
    62.7 -  return !is_type_none(p) &&
    62.8 -    !((Klass*)klass_part(p))->is_loader_alive(is_alive_cl);
    62.9 +  Klass* k = (Klass*)klass_part(p);
   62.10 +  return k != NULL && k->is_loader_alive(is_alive_cl);
   62.11  }
   62.12  
   62.13  void TypeStackSlotEntries::clean_weak_klass_links(BoolObjectClosure* is_alive_cl) {
   62.14    for (int i = 0; i < _number_of_entries; i++) {
   62.15      intptr_t p = type(i);
   62.16 -    if (is_loader_alive(is_alive_cl, p)) {
   62.17 -      set_type(i, type_none());
   62.18 +    if (!is_loader_alive(is_alive_cl, p)) {
   62.19 +      set_type(i, with_status((Klass*)NULL, p));
   62.20      }
   62.21    }
   62.22  }
   62.23  
   62.24  void ReturnTypeEntry::clean_weak_klass_links(BoolObjectClosure* is_alive_cl) {
   62.25    intptr_t p = type();
   62.26 -  if (is_loader_alive(is_alive_cl, p)) {
   62.27 -    set_type(type_none());
   62.28 +  if (!is_loader_alive(is_alive_cl, p)) {
   62.29 +    set_type(with_status((Klass*)NULL, p));
   62.30    }
   62.31  }
   62.32  
    63.1 --- a/src/share/vm/oops/methodData.hpp	Wed Nov 20 11:08:09 2013 -0800
    63.2 +++ b/src/share/vm/oops/methodData.hpp	Thu Nov 21 12:30:35 2013 -0800
    63.3 @@ -777,7 +777,6 @@
    63.4    // recorded type: cell without bit 0 and 1
    63.5    static intptr_t klass_part(intptr_t v) {
    63.6      intptr_t r = v & type_klass_mask;
    63.7 -    assert (r != 0, "invalid");
    63.8      return r;
    63.9    }
   63.10  
   63.11 @@ -785,7 +784,9 @@
   63.12    static Klass* valid_klass(intptr_t k) {
   63.13      if (!is_type_none(k) &&
   63.14          !is_type_unknown(k)) {
   63.15 -      return (Klass*)klass_part(k);
   63.16 +      Klass* res = (Klass*)klass_part(k);
   63.17 +      assert(res != NULL, "invalid");
   63.18 +      return res;
   63.19      } else {
   63.20        return NULL;
   63.21      }
    64.1 --- a/src/share/vm/opto/bytecodeInfo.cpp	Wed Nov 20 11:08:09 2013 -0800
    64.2 +++ b/src/share/vm/opto/bytecodeInfo.cpp	Thu Nov 21 12:30:35 2013 -0800
    64.3 @@ -389,6 +389,10 @@
    64.4      return false;
    64.5    }
    64.6    if (inline_level() > _max_inline_level) {
    64.7 +    if (callee_method->force_inline() && inline_level() > MaxForceInlineLevel) {
    64.8 +      set_msg("MaxForceInlineLevel");
    64.9 +      return false;
   64.10 +    }
   64.11      if (!callee_method->force_inline() || !IncrementalInline) {
   64.12        set_msg("inlining too deep");
   64.13        return false;
    65.1 --- a/src/share/vm/opto/callGenerator.cpp	Wed Nov 20 11:08:09 2013 -0800
    65.2 +++ b/src/share/vm/opto/callGenerator.cpp	Thu Nov 21 12:30:35 2013 -0800
    65.3 @@ -776,7 +776,7 @@
    65.4          guarantee(!target->is_method_handle_intrinsic(), "should not happen");  // XXX remove
    65.5          const int vtable_index = Method::invalid_vtable_index;
    65.6          CallGenerator* cg = C->call_generator(target, vtable_index, false, jvms, true, PROB_ALWAYS, NULL, true, true);
    65.7 -        assert(!cg->is_late_inline() || cg->is_mh_late_inline(), "no late inline here");
    65.8 +        assert(cg == NULL || !cg->is_late_inline() || cg->is_mh_late_inline(), "no late inline here");
    65.9          if (cg != NULL && cg->is_inline())
   65.10            return cg;
   65.11        }
   65.12 @@ -846,7 +846,7 @@
   65.13          }
   65.14  
   65.15          CallGenerator* cg = C->call_generator(target, vtable_index, call_does_dispatch, jvms, true, PROB_ALWAYS, speculative_receiver_type, true, true);
   65.16 -        assert(!cg->is_late_inline() || cg->is_mh_late_inline(), "no late inline here");
   65.17 +        assert(cg == NULL || !cg->is_late_inline() || cg->is_mh_late_inline(), "no late inline here");
   65.18          if (cg != NULL && cg->is_inline())
   65.19            return cg;
   65.20        }
    66.1 --- a/src/share/vm/opto/compile.cpp	Wed Nov 20 11:08:09 2013 -0800
    66.2 +++ b/src/share/vm/opto/compile.cpp	Thu Nov 21 12:30:35 2013 -0800
    66.3 @@ -851,6 +851,7 @@
    66.4    }
    66.5  #endif
    66.6  
    66.7 +  NOT_PRODUCT( verify_barriers(); )
    66.8    // Now that we know the size of all the monitors we can add a fixed slot
    66.9    // for the original deopt pc.
   66.10  
   66.11 @@ -3027,12 +3028,17 @@
   66.12            // Phi nodes shouldn't be moved. They would only match below if they
   66.13            // had the same control as the MathExactNode. The only time that
   66.14            // would happen is if the Phi is also an input to the MathExact
   66.15 -          if (!out->is_Phi()) {
   66.16 -            if (out->in(0) == NULL) {
   66.17 -              out->set_req(0, non_throwing);
   66.18 -            } else if (out->in(0) == ctrl) {
   66.19 -              out->set_req(0, non_throwing);
   66.20 -            }
   66.21 +          //
   66.22 +          // Cmp nodes shouldn't have control set at all.
   66.23 +          if (out->is_Phi() ||
   66.24 +              out->is_Cmp()) {
   66.25 +            continue;
   66.26 +          }
   66.27 +
   66.28 +          if (out->in(0) == NULL) {
   66.29 +            out->set_req(0, non_throwing);
   66.30 +          } else if (out->in(0) == ctrl) {
   66.31 +            out->set_req(0, non_throwing);
   66.32            }
   66.33          }
   66.34        }
   66.35 @@ -3377,6 +3383,72 @@
   66.36      }
   66.37    }
   66.38  }
   66.39 +
   66.40 +// Verify GC barriers consistency
   66.41 +// Currently supported:
   66.42 +// - G1 pre-barriers (see GraphKit::g1_write_barrier_pre())
   66.43 +void Compile::verify_barriers() {
   66.44 +  if (UseG1GC) {
   66.45 +    // Verify G1 pre-barriers
   66.46 +    const int marking_offset = in_bytes(JavaThread::satb_mark_queue_offset() + PtrQueue::byte_offset_of_active());
   66.47 +
   66.48 +    ResourceArea *area = Thread::current()->resource_area();
   66.49 +    Unique_Node_List visited(area);
   66.50 +    Node_List worklist(area);
   66.51 +    // We're going to walk control flow backwards starting from the Root
   66.52 +    worklist.push(_root);
   66.53 +    while (worklist.size() > 0) {
   66.54 +      Node* x = worklist.pop();
   66.55 +      if (x == NULL || x == top()) continue;
   66.56 +      if (visited.member(x)) {
   66.57 +        continue;
   66.58 +      } else {
   66.59 +        visited.push(x);
   66.60 +      }
   66.61 +
   66.62 +      if (x->is_Region()) {
   66.63 +        for (uint i = 1; i < x->req(); i++) {
   66.64 +          worklist.push(x->in(i));
   66.65 +        }
   66.66 +      } else {
   66.67 +        worklist.push(x->in(0));
   66.68 +        // We are looking for the pattern:
   66.69 +        //                            /->ThreadLocal
   66.70 +        // If->Bool->CmpI->LoadB->AddP->ConL(marking_offset)
   66.71 +        //              \->ConI(0)
   66.72 +        // We want to verify that the If and the LoadB have the same control
   66.73 +        // See GraphKit::g1_write_barrier_pre()
   66.74 +        if (x->is_If()) {
   66.75 +          IfNode *iff = x->as_If();
   66.76 +          if (iff->in(1)->is_Bool() && iff->in(1)->in(1)->is_Cmp()) {
   66.77 +            CmpNode *cmp = iff->in(1)->in(1)->as_Cmp();
   66.78 +            if (cmp->Opcode() == Op_CmpI && cmp->in(2)->is_Con() && cmp->in(2)->bottom_type()->is_int()->get_con() == 0
   66.79 +                && cmp->in(1)->is_Load()) {
   66.80 +              LoadNode* load = cmp->in(1)->as_Load();
   66.81 +              if (load->Opcode() == Op_LoadB && load->in(2)->is_AddP() && load->in(2)->in(2)->Opcode() == Op_ThreadLocal
   66.82 +                  && load->in(2)->in(3)->is_Con()
   66.83 +                  && load->in(2)->in(3)->bottom_type()->is_intptr_t()->get_con() == marking_offset) {
   66.84 +
   66.85 +                Node* if_ctrl = iff->in(0);
   66.86 +                Node* load_ctrl = load->in(0);
   66.87 +
   66.88 +                if (if_ctrl != load_ctrl) {
   66.89 +                  // Skip possible CProj->NeverBranch in infinite loops
   66.90 +                  if ((if_ctrl->is_Proj() && if_ctrl->Opcode() == Op_CProj)
   66.91 +                      && (if_ctrl->in(0)->is_MultiBranch() && if_ctrl->in(0)->Opcode() == Op_NeverBranch)) {
   66.92 +                    if_ctrl = if_ctrl->in(0)->in(0);
   66.93 +                  }
   66.94 +                }
   66.95 +                assert(load_ctrl != NULL && if_ctrl == load_ctrl, "controls must match");
   66.96 +              }
   66.97 +            }
   66.98 +          }
   66.99 +        }
  66.100 +      }
  66.101 +    }
  66.102 +  }
  66.103 +}
  66.104 +
  66.105  #endif
  66.106  
  66.107  // The Compile object keeps track of failure reasons separately from the ciEnv.
    67.1 --- a/src/share/vm/opto/compile.hpp	Wed Nov 20 11:08:09 2013 -0800
    67.2 +++ b/src/share/vm/opto/compile.hpp	Thu Nov 21 12:30:35 2013 -0800
    67.3 @@ -1148,6 +1148,9 @@
    67.4    // graph is strongly connected from root in both directions.
    67.5    void verify_graph_edges(bool no_dead_code = false) PRODUCT_RETURN;
    67.6  
    67.7 +  // Verify GC barrier patterns
    67.8 +  void verify_barriers() PRODUCT_RETURN;
    67.9 +
   67.10    // End-of-run dumps.
   67.11    static void print_statistics() PRODUCT_RETURN;
   67.12  
    68.1 --- a/src/share/vm/opto/loopTransform.cpp	Wed Nov 20 11:08:09 2013 -0800
    68.2 +++ b/src/share/vm/opto/loopTransform.cpp	Thu Nov 21 12:30:35 2013 -0800
    68.3 @@ -1964,7 +1964,7 @@
    68.4        // Find loads off the surviving projection; remove their control edge
    68.5        for (DUIterator_Fast imax, i = dp->fast_outs(imax); i < imax; i++) {
    68.6          Node* cd = dp->fast_out(i); // Control-dependent node
    68.7 -        if( cd->is_Load() ) {   // Loads can now float around in the loop
    68.8 +        if (cd->is_Load() && cd->depends_only_on_test()) {   // Loads can now float around in the loop
    68.9            // Allow the load to float around in the loop, or before it
   68.10            // but NOT before the pre-loop.
   68.11            _igvn.replace_input_of(cd, 0, ctrl); // ctrl, not NULL
    69.1 --- a/src/share/vm/opto/loopopts.cpp	Wed Nov 20 11:08:09 2013 -0800
    69.2 +++ b/src/share/vm/opto/loopopts.cpp	Thu Nov 21 12:30:35 2013 -0800
    69.3 @@ -42,6 +42,13 @@
    69.4      // so disable this for now
    69.5      return NULL;
    69.6    }
    69.7 +
    69.8 +  if (n->is_MathExact()) {
    69.9 +    // MathExact has projections that are not correctly handled in the code
   69.10 +    // below.
   69.11 +    return NULL;
   69.12 +  }
   69.13 +
   69.14    int wins = 0;
   69.15    assert(!n->is_CFG(), "");
   69.16    assert(region->is_Region(), "");
    70.1 --- a/src/share/vm/opto/matcher.cpp	Wed Nov 20 11:08:09 2013 -0800
    70.2 +++ b/src/share/vm/opto/matcher.cpp	Thu Nov 21 12:30:35 2013 -0800
    70.3 @@ -467,17 +467,17 @@
    70.4    C->FIRST_STACK_mask().Clear();
    70.5  
    70.6    // Add in the incoming argument area
    70.7 -  OptoReg::Name init = OptoReg::add(_old_SP, C->out_preserve_stack_slots());
    70.8 -  for (i = init; i < _in_arg_limit; i = OptoReg::add(i,1))
    70.9 +  OptoReg::Name init_in = OptoReg::add(_old_SP, C->out_preserve_stack_slots());
   70.10 +  for (i = init_in; i < _in_arg_limit; i = OptoReg::add(i,1)) {
   70.11      C->FIRST_STACK_mask().Insert(i);
   70.12 -
   70.13 +  }
   70.14    // Add in all bits past the outgoing argument area
   70.15    guarantee(RegMask::can_represent_arg(OptoReg::add(_out_arg_limit,-1)),
   70.16              "must be able to represent all call arguments in reg mask");
   70.17 -  init = _out_arg_limit;
   70.18 -  for (i = init; RegMask::can_represent(i); i = OptoReg::add(i,1))
   70.19 +  OptoReg::Name init = _out_arg_limit;
   70.20 +  for (i = init; RegMask::can_represent(i); i = OptoReg::add(i,1)) {
   70.21      C->FIRST_STACK_mask().Insert(i);
   70.22 -
   70.23 +  }
   70.24    // Finally, set the "infinite stack" bit.
   70.25    C->FIRST_STACK_mask().set_AllStack();
   70.26  
   70.27 @@ -509,16 +509,36 @@
   70.28       idealreg2spillmask[Op_VecS]->OR(C->FIRST_STACK_mask());
   70.29    }
   70.30    if (Matcher::vector_size_supported(T_FLOAT,2)) {
   70.31 +    // For VecD we need dual alignment and 8 bytes (2 slots) for spills.
   70.32 +    // RA guarantees such alignment since it is needed for Double and Long values.
   70.33      *idealreg2spillmask[Op_VecD] = *idealreg2regmask[Op_VecD];
   70.34       idealreg2spillmask[Op_VecD]->OR(aligned_stack_mask);
   70.35    }
   70.36    if (Matcher::vector_size_supported(T_FLOAT,4)) {
   70.37 +    // For VecX we need quadro alignment and 16 bytes (4 slots) for spills.
   70.38 +    //
   70.39 +    // RA can use input arguments stack slots for spills but until RA
   70.40 +    // we don't know frame size and offset of input arg stack slots.
   70.41 +    //
   70.42 +    // Exclude last input arg stack slots to avoid spilling vectors there
   70.43 +    // otherwise vector spills could stomp over stack slots in caller frame.
   70.44 +    OptoReg::Name in = OptoReg::add(_in_arg_limit, -1);
   70.45 +    for (int k = 1; (in >= init_in) && (k < RegMask::SlotsPerVecX); k++) {
   70.46 +      aligned_stack_mask.Remove(in);
   70.47 +      in = OptoReg::add(in, -1);
   70.48 +    }
   70.49       aligned_stack_mask.clear_to_sets(RegMask::SlotsPerVecX);
   70.50       assert(aligned_stack_mask.is_AllStack(), "should be infinite stack");
   70.51      *idealreg2spillmask[Op_VecX] = *idealreg2regmask[Op_VecX];
   70.52       idealreg2spillmask[Op_VecX]->OR(aligned_stack_mask);
   70.53    }
   70.54    if (Matcher::vector_size_supported(T_FLOAT,8)) {
   70.55 +    // For VecY we need octo alignment and 32 bytes (8 slots) for spills.
   70.56 +    OptoReg::Name in = OptoReg::add(_in_arg_limit, -1);
   70.57 +    for (int k = 1; (in >= init_in) && (k < RegMask::SlotsPerVecY); k++) {
   70.58 +      aligned_stack_mask.Remove(in);
   70.59 +      in = OptoReg::add(in, -1);
   70.60 +    }
   70.61       aligned_stack_mask.clear_to_sets(RegMask::SlotsPerVecY);
   70.62       assert(aligned_stack_mask.is_AllStack(), "should be infinite stack");
   70.63      *idealreg2spillmask[Op_VecY] = *idealreg2regmask[Op_VecY];
    71.1 --- a/src/share/vm/opto/mathexactnode.hpp	Wed Nov 20 11:08:09 2013 -0800
    71.2 +++ b/src/share/vm/opto/mathexactnode.hpp	Thu Nov 21 12:30:35 2013 -0800
    71.3 @@ -49,7 +49,7 @@
    71.4    virtual Node* Identity(PhaseTransform* phase) { return this; }
    71.5    virtual Node* Ideal(PhaseGVN* phase, bool can_reshape) { return NULL; }
    71.6    virtual const Type* Value(PhaseTransform* phase) const { return bottom_type(); }
    71.7 -  virtual uint hash() const { return Node::hash(); }
    71.8 +  virtual uint hash() const { return NO_HASH; }
    71.9    virtual bool is_CFG() const { return false; }
   71.10    virtual uint ideal_reg() const { return NotAMachineReg; }
   71.11  
    72.1 --- a/src/share/vm/opto/memnode.hpp	Wed Nov 20 11:08:09 2013 -0800
    72.2 +++ b/src/share/vm/opto/memnode.hpp	Thu Nov 21 12:30:35 2013 -0800
    72.3 @@ -220,6 +220,17 @@
    72.4  protected:
    72.5    const Type* load_array_final_field(const TypeKlassPtr *tkls,
    72.6                                       ciKlass* klass) const;
    72.7 +  // depends_only_on_test is almost always true, and needs to be almost always
    72.8 +  // true to enable key hoisting & commoning optimizations.  However, for the
    72.9 +  // special case of RawPtr loads from TLS top & end, and other loads performed by
   72.10 +  // GC barriers, the control edge carries the dependence preventing hoisting past
   72.11 +  // a Safepoint instead of the memory edge.  (An unfortunate consequence of having
   72.12 +  // Safepoints not set Raw Memory; itself an unfortunate consequence of having Nodes
   72.13 +  // which produce results (new raw memory state) inside of loops preventing all
   72.14 +  // manner of other optimizations).  Basically, it's ugly but so is the alternative.
   72.15 +  // See comment in macro.cpp, around line 125 expand_allocate_common().
   72.16 +  virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; }
   72.17 +
   72.18  };
   72.19  
   72.20  //------------------------------LoadBNode--------------------------------------
   72.21 @@ -384,16 +395,6 @@
   72.22    virtual uint ideal_reg() const { return Op_RegP; }
   72.23    virtual int store_Opcode() const { return Op_StoreP; }
   72.24    virtual BasicType memory_type() const { return T_ADDRESS; }
   72.25 -  // depends_only_on_test is almost always true, and needs to be almost always
   72.26 -  // true to enable key hoisting & commoning optimizations.  However, for the
   72.27 -  // special case of RawPtr loads from TLS top & end, the control edge carries
   72.28 -  // the dependence preventing hoisting past a Safepoint instead of the memory
   72.29 -  // edge.  (An unfortunate consequence of having Safepoints not set Raw
   72.30 -  // Memory; itself an unfortunate consequence of having Nodes which produce
   72.31 -  // results (new raw memory state) inside of loops preventing all manner of
   72.32 -  // other optimizations).  Basically, it's ugly but so is the alternative.
   72.33 -  // See comment in macro.cpp, around line 125 expand_allocate_common().
   72.34 -  virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; }
   72.35  };
   72.36  
   72.37  
   72.38 @@ -407,16 +408,6 @@
   72.39    virtual uint ideal_reg() const { return Op_RegN; }
   72.40    virtual int store_Opcode() const { return Op_StoreN; }
   72.41    virtual BasicType memory_type() const { return T_NARROWOOP; }
   72.42 -  // depends_only_on_test is almost always true, and needs to be almost always
   72.43 -  // true to enable key hoisting & commoning optimizations.  However, for the
   72.44 -  // special case of RawPtr loads from TLS top & end, the control edge carries
   72.45 -  // the dependence preventing hoisting past a Safepoint instead of the memory
   72.46 -  // edge.  (An unfortunate consequence of having Safepoints not set Raw
   72.47 -  // Memory; itself an unfortunate consequence of having Nodes which produce
   72.48 -  // results (new raw memory state) inside of loops preventing all manner of
   72.49 -  // other optimizations).  Basically, it's ugly but so is the alternative.
   72.50 -  // See comment in macro.cpp, around line 125 expand_allocate_common().
   72.51 -  virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; }
   72.52  };
   72.53  
   72.54  //------------------------------LoadKlassNode----------------------------------
    73.1 --- a/src/share/vm/prims/jvmtiImpl.cpp	Wed Nov 20 11:08:09 2013 -0800
    73.2 +++ b/src/share/vm/prims/jvmtiImpl.cpp	Thu Nov 21 12:30:35 2013 -0800
    73.3 @@ -210,6 +210,14 @@
    73.4    }
    73.5  }
    73.6  
    73.7 +void GrowableCache::metadata_do(void f(Metadata*)) {
    73.8 +  int len = _elements->length();
    73.9 +  for (int i=0; i<len; i++) {
   73.10 +    GrowableElement *e = _elements->at(i);
   73.11 +    e->metadata_do(f);
   73.12 +  }
   73.13 +}
   73.14 +
   73.15  void GrowableCache::gc_epilogue() {
   73.16    int len = _elements->length();
   73.17    for (int i=0; i<len; i++) {
   73.18 @@ -224,20 +232,20 @@
   73.19  JvmtiBreakpoint::JvmtiBreakpoint() {
   73.20    _method = NULL;
   73.21    _bci    = 0;
   73.22 -  _class_loader = NULL;
   73.23 +  _class_holder = NULL;
   73.24  }
   73.25  
   73.26  JvmtiBreakpoint::JvmtiBreakpoint(Method* m_method, jlocation location) {
   73.27    _method        = m_method;
   73.28 -  _class_loader  = _method->method_holder()->class_loader_data()->class_loader();
   73.29 +  _class_holder  = _method->method_holder()->klass_holder();
   73.30  #ifdef CHECK_UNHANDLED_OOPS
   73.31 -  // _class_loader can't be wrapped in a Handle, because JvmtiBreakpoint:s are
   73.32 -  // eventually allocated on the heap.
   73.33 +  // _class_holder can't be wrapped in a Handle, because JvmtiBreakpoints are
   73.34 +  // sometimes allocated on the heap.
   73.35    //
   73.36 -  // The code handling JvmtiBreakpoint:s allocated on the stack can't be
   73.37 -  // interrupted by a GC until _class_loader is reachable by the GC via the
   73.38 +  // The code handling JvmtiBreakpoints allocated on the stack can't be
   73.39 +  // interrupted by a GC until _class_holder is reachable by the GC via the
   73.40    // oops_do method.
   73.41 -  Thread::current()->allow_unhandled_oop(&_class_loader);
   73.42 +  Thread::current()->allow_unhandled_oop(&_class_holder);
   73.43  #endif // CHECK_UNHANDLED_OOPS
   73.44    assert(_method != NULL, "_method != NULL");
   73.45    _bci           = (int) location;
   73.46 @@ -247,7 +255,7 @@
   73.47  void JvmtiBreakpoint::copy(JvmtiBreakpoint& bp) {
   73.48    _method   = bp._method;
   73.49    _bci      = bp._bci;
   73.50 -  _class_loader = bp._class_loader;
   73.51 +  _class_holder = bp._class_holder;
   73.52  }
   73.53  
   73.54  bool JvmtiBreakpoint::lessThan(JvmtiBreakpoint& bp) {
   73.55 @@ -365,6 +373,13 @@
   73.56    }
   73.57  }
   73.58  
   73.59 +void VM_ChangeBreakpoints::metadata_do(void f(Metadata*)) {
   73.60 +  // Walk metadata in breakpoints to keep from being deallocated with RedefineClasses
   73.61 +  if (_bp != NULL) {
   73.62 +    _bp->metadata_do(f);
   73.63 +  }
   73.64 +}
   73.65 +
   73.66  //
   73.67  // class JvmtiBreakpoints
   73.68  //
   73.69 @@ -381,6 +396,10 @@
   73.70    _bps.oops_do(f);
   73.71  }
   73.72  
   73.73 +void  JvmtiBreakpoints::metadata_do(void f(Metadata*)) {
   73.74 +  _bps.metadata_do(f);
   73.75 +}
   73.76 +
   73.77  void JvmtiBreakpoints::gc_epilogue() {
   73.78    _bps.gc_epilogue();
   73.79  }
   73.80 @@ -499,6 +518,12 @@
   73.81    }
   73.82  }
   73.83  
   73.84 +void JvmtiCurrentBreakpoints::metadata_do(void f(Metadata*)) {
   73.85 +  if (_jvmti_breakpoints != NULL) {
   73.86 +    _jvmti_breakpoints->metadata_do(f);
   73.87 +  }
   73.88 +}
   73.89 +
   73.90  void JvmtiCurrentBreakpoints::gc_epilogue() {
   73.91    if (_jvmti_breakpoints != NULL) {
   73.92      _jvmti_breakpoints->gc_epilogue();
    74.1 --- a/src/share/vm/prims/jvmtiImpl.hpp	Wed Nov 20 11:08:09 2013 -0800
    74.2 +++ b/src/share/vm/prims/jvmtiImpl.hpp	Thu Nov 21 12:30:35 2013 -0800
    74.3 @@ -69,6 +69,7 @@
    74.4    virtual bool lessThan(GrowableElement *e)=0;
    74.5    virtual GrowableElement *clone()         =0;
    74.6    virtual void oops_do(OopClosure* f)      =0;
    74.7 +  virtual void metadata_do(void f(Metadata*)) =0;
    74.8  };
    74.9  
   74.10  class GrowableCache VALUE_OBJ_CLASS_SPEC {
   74.11 @@ -115,6 +116,8 @@
   74.12    void clear();
   74.13    // apply f to every element and update the cache
   74.14    void oops_do(OopClosure* f);
   74.15 +  // walk metadata to preserve for RedefineClasses
   74.16 +  void metadata_do(void f(Metadata*));
   74.17    // update the cache after a full gc
   74.18    void gc_epilogue();
   74.19  };
   74.20 @@ -148,6 +151,7 @@
   74.21    void remove (int index)               { _cache.remove(index); }
   74.22    void clear()                          { _cache.clear(); }
   74.23    void oops_do(OopClosure* f)           { _cache.oops_do(f); }
   74.24 +  void metadata_do(void f(Metadata*))   { _cache.metadata_do(f); }
   74.25    void gc_epilogue()                    { _cache.gc_epilogue(); }
   74.26  };
   74.27  
   74.28 @@ -169,7 +173,7 @@
   74.29    Method*               _method;
   74.30    int                   _bci;
   74.31    Bytecodes::Code       _orig_bytecode;
   74.32 -  oop                   _class_loader;
   74.33 +  oop                   _class_holder;  // keeps _method memory from being deallocated
   74.34  
   74.35  public:
   74.36    JvmtiBreakpoint();
   74.37 @@ -191,9 +195,15 @@
   74.38    bool lessThan(GrowableElement* e) { Unimplemented(); return false; }
   74.39    bool equals(GrowableElement* e) { return equals((JvmtiBreakpoint&) *e); }
   74.40    void oops_do(OopClosure* f)     {
   74.41 -    // Mark the method loader as live
   74.42 -    f->do_oop(&_class_loader);
   74.43 +    // Mark the method loader as live so the Method* class loader doesn't get
   74.44 +    // unloaded and Method* memory reclaimed.
   74.45 +    f->do_oop(&_class_holder);
   74.46    }
   74.47 +  void metadata_do(void f(Metadata*)) {
   74.48 +    // walk metadata to preserve for RedefineClasses
   74.49 +    f(_method);
   74.50 +  }
   74.51 +
   74.52    GrowableElement *clone()        {
   74.53      JvmtiBreakpoint *bp = new JvmtiBreakpoint();
   74.54      bp->copy(*this);
   74.55 @@ -239,6 +249,7 @@
   74.56  
   74.57    int length();
   74.58    void oops_do(OopClosure* f);
   74.59 +  void metadata_do(void f(Metadata*));
   74.60    void print();
   74.61  
   74.62    int  set(JvmtiBreakpoint& bp);
   74.63 @@ -288,6 +299,7 @@
   74.64    static inline bool is_breakpoint(address bcp);
   74.65  
   74.66    static void oops_do(OopClosure* f);
   74.67 +  static void metadata_do(void f(Metadata*));
   74.68    static void gc_epilogue();
   74.69  };
   74.70  
   74.71 @@ -332,6 +344,7 @@
   74.72    VMOp_Type type() const { return VMOp_ChangeBreakpoints; }
   74.73    void doit();
   74.74    void oops_do(OopClosure* f);
   74.75 +  void metadata_do(void f(Metadata*));
   74.76  };
   74.77  
   74.78  
    75.1 --- a/src/share/vm/prims/whitebox.cpp	Wed Nov 20 11:08:09 2013 -0800
    75.2 +++ b/src/share/vm/prims/whitebox.cpp	Thu Nov 21 12:30:35 2013 -0800
    75.3 @@ -53,6 +53,8 @@
    75.4  #include "compiler/compileBroker.hpp"
    75.5  #include "runtime/compilationPolicy.hpp"
    75.6  
    75.7 +#define SIZE_T_MAX_VALUE ((size_t) -1)
    75.8 +
    75.9  bool WhiteBox::_used = false;
   75.10  
   75.11  WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj))
   75.12 @@ -105,10 +107,116 @@
   75.13    gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap "
   75.14      SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT,
   75.15      p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
   75.16 -    p->min_alignment(), p->max_alignment());
   75.17 +    p->space_alignment(), p->heap_alignment());
   75.18  }
   75.19  WB_END
   75.20  
   75.21 +#ifndef PRODUCT
   75.22 +// Forward declaration
   75.23 +void TestReservedSpace_test();
   75.24 +void TestReserveMemorySpecial_test();
   75.25 +void TestVirtualSpace_test();
   75.26 +void TestMetaspaceAux_test();
   75.27 +#endif
   75.28 +
   75.29 +WB_ENTRY(void, WB_RunMemoryUnitTests(JNIEnv* env, jobject o))
   75.30 +#ifndef PRODUCT
   75.31 +  TestReservedSpace_test();
   75.32 +  TestReserveMemorySpecial_test();
   75.33 +  TestVirtualSpace_test();
   75.34 +  TestMetaspaceAux_test();
   75.35 +#endif
   75.36 +WB_END
   75.37 +
   75.38 +WB_ENTRY(void, WB_ReadFromNoaccessArea(JNIEnv* env, jobject o))
   75.39 +  size_t granularity = os::vm_allocation_granularity();
   75.40 +  ReservedHeapSpace rhs(100 * granularity, granularity, false, NULL);
   75.41 +  VirtualSpace vs;
   75.42 +  vs.initialize(rhs, 50 * granularity);
   75.43 +
   75.44 +  //Check if constraints are complied
   75.45 +  if (!( UseCompressedOops && rhs.base() != NULL &&
   75.46 +         Universe::narrow_oop_base() != NULL &&
   75.47 +         Universe::narrow_oop_use_implicit_null_checks() )) {
   75.48 +    tty->print_cr("WB_ReadFromNoaccessArea method is useless:\n "
   75.49 +                  "\tUseCompressedOops is %d\n"
   75.50 +                  "\trhs.base() is "PTR_FORMAT"\n"
   75.51 +                  "\tUniverse::narrow_oop_base() is "PTR_FORMAT"\n"
   75.52 +                  "\tUniverse::narrow_oop_use_implicit_null_checks() is %d",
   75.53 +                  UseCompressedOops,
   75.54 +                  rhs.base(),
   75.55 +                  Universe::narrow_oop_base(),
   75.56 +                  Universe::narrow_oop_use_implicit_null_checks());
   75.57 +    return;
   75.58 +  }
   75.59 +  tty->print_cr("Reading from no access area... ");
   75.60 +  tty->print_cr("*(vs.low_boundary() - rhs.noaccess_prefix() / 2 ) = %c",
   75.61 +                *(vs.low_boundary() - rhs.noaccess_prefix() / 2 ));
   75.62 +WB_END
   75.63 +
   75.64 +static jint wb_stress_virtual_space_resize(size_t reserved_space_size,
   75.65 +                                           size_t magnitude, size_t iterations) {
   75.66 +  size_t granularity = os::vm_allocation_granularity();
   75.67 +  ReservedHeapSpace rhs(reserved_space_size * granularity, granularity, false, NULL);
   75.68 +  VirtualSpace vs;
   75.69 +  if (!vs.initialize(rhs, 0)) {
   75.70 +    tty->print_cr("Failed to initialize VirtualSpace. Can't proceed.");
   75.71 +    return 3;
   75.72 +  }
   75.73 +
   75.74 +  long seed = os::random();
   75.75 +  tty->print_cr("Random seed is %ld", seed);
   75.76 +  os::init_random(seed);
   75.77 +
   75.78 +  for (size_t i = 0; i < iterations; i++) {
   75.79 +
   75.80 +    // Whether we will shrink or grow
   75.81 +    bool shrink = os::random() % 2L == 0;
   75.82 +
   75.83 +    // Get random delta to resize virtual space
   75.84 +    size_t delta = (size_t)os::random() % magnitude;
   75.85 +
   75.86 +    // If we are about to shrink virtual space below zero, then expand instead
   75.87 +    if (shrink && vs.committed_size() < delta) {
   75.88 +      shrink = false;
   75.89 +    }
   75.90 +
   75.91 +    // Resizing by delta
   75.92 +    if (shrink) {
   75.93 +      vs.shrink_by(delta);
   75.94 +    } else {
   75.95 +      // If expanding fails expand_by will silently return false
   75.96 +      vs.expand_by(delta, true);
   75.97 +    }
   75.98 +  }
   75.99 +  return 0;
  75.100 +}
  75.101 +
  75.102 +WB_ENTRY(jint, WB_StressVirtualSpaceResize(JNIEnv* env, jobject o,
  75.103 +        jlong reserved_space_size, jlong magnitude, jlong iterations))
  75.104 +  tty->print_cr("reservedSpaceSize="JLONG_FORMAT", magnitude="JLONG_FORMAT", "
  75.105 +                "iterations="JLONG_FORMAT"\n", reserved_space_size, magnitude,
  75.106 +                iterations);
  75.107 +  if (reserved_space_size < 0 || magnitude < 0 || iterations < 0) {
  75.108 +    tty->print_cr("One of variables printed above is negative. Can't proceed.\n");
  75.109 +    return 1;
  75.110 +  }
  75.111 +
  75.112 +  // sizeof(size_t) depends on whether OS is 32bit or 64bit. sizeof(jlong) is
  75.113 +  // always 8 byte. That's why we should avoid overflow in case of 32bit platform.
  75.114 +  if (sizeof(size_t) < sizeof(jlong)) {
  75.115 +    jlong size_t_max_value = (jlong) SIZE_T_MAX_VALUE;
  75.116 +    if (reserved_space_size > size_t_max_value || magnitude > size_t_max_value
  75.117 +        || iterations > size_t_max_value) {
  75.118 +      tty->print_cr("One of variables printed above overflows size_t. Can't proceed.\n");
  75.119 +      return 2;
  75.120 +    }
  75.121 +  }
  75.122 +
  75.123 +  return wb_stress_virtual_space_resize((size_t) reserved_space_size,
  75.124 +                                        (size_t) magnitude, (size_t) iterations);
  75.125 +WB_END
  75.126 +
  75.127  #if INCLUDE_ALL_GCS
  75.128  WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
  75.129    G1CollectedHeap* g1 = G1CollectedHeap::heap();
  75.130 @@ -445,6 +553,9 @@
  75.131    {CC"getCompressedOopsMaxHeapSize", CC"()J",
  75.132        (void*)&WB_GetCompressedOopsMaxHeapSize},
  75.133    {CC"printHeapSizes",     CC"()V",                   (void*)&WB_PrintHeapSizes    },
  75.134 +  {CC"runMemoryUnitTests", CC"()V",                   (void*)&WB_RunMemoryUnitTests},
  75.135 +  {CC"readFromNoaccessArea",CC"()V",                  (void*)&WB_ReadFromNoaccessArea},
  75.136 +  {CC"stressVirtualSpaceResize",CC"(JJJ)I",           (void*)&WB_StressVirtualSpaceResize},
  75.137  #if INCLUDE_ALL_GCS
  75.138    {CC"g1InConcurrentMark", CC"()Z",                   (void*)&WB_G1InConcurrentMark},
  75.139    {CC"g1IsHumongous",      CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous     },
    76.1 --- a/src/share/vm/runtime/arguments.cpp	Wed Nov 20 11:08:09 2013 -0800
    76.2 +++ b/src/share/vm/runtime/arguments.cpp	Thu Nov 21 12:30:35 2013 -0800
    76.3 @@ -1135,9 +1135,6 @@
    76.4      Tier3InvokeNotifyFreqLog = 0;
    76.5      Tier4InvocationThreshold = 0;
    76.6    }
    76.7 -  if (FLAG_IS_DEFAULT(NmethodSweepFraction)) {
    76.8 -    FLAG_SET_DEFAULT(NmethodSweepFraction, 1 + ReservedCodeCacheSize / (16 * M));
    76.9 -  }
   76.10  }
   76.11  
   76.12  #if INCLUDE_ALL_GCS
   76.13 @@ -1411,7 +1408,7 @@
   76.14    // NULL page is located before the heap, we pad the NULL page to the conservative
   76.15    // maximum alignment that the GC may ever impose upon the heap.
   76.16    size_t displacement_due_to_null_page = align_size_up_(os::vm_page_size(),
   76.17 -    Arguments::conservative_max_heap_alignment());
   76.18 +                                                        _conservative_max_heap_alignment);
   76.19  
   76.20    LP64_ONLY(return OopEncodingHeapMax - displacement_due_to_null_page);
   76.21    NOT_LP64(ShouldNotReachHere(); return 0);
   76.22 @@ -1508,7 +1505,7 @@
   76.23    }
   76.24  #endif // INCLUDE_ALL_GCS
   76.25    _conservative_max_heap_alignment = MAX3(heap_alignment, os::max_page_size(),
   76.26 -    CollectorPolicy::compute_max_alignment());
   76.27 +    CollectorPolicy::compute_heap_alignment());
   76.28  }
   76.29  
   76.30  void Arguments::set_ergonomics_flags() {
   76.31 @@ -2168,6 +2165,10 @@
   76.32  
   76.33  #if INCLUDE_ALL_GCS
   76.34    if (UseG1GC) {
   76.35 +    status = status && verify_percentage(G1NewSizePercent, "G1NewSizePercent");
   76.36 +    status = status && verify_percentage(G1MaxNewSizePercent, "G1MaxNewSizePercent");
   76.37 +    status = status && verify_interval(G1NewSizePercent, 0, G1MaxNewSizePercent, "G1NewSizePercent");
   76.38 +
   76.39      status = status && verify_percentage(InitiatingHeapOccupancyPercent,
   76.40                                           "InitiatingHeapOccupancyPercent");
   76.41      status = status && verify_min_value(G1RefProcDrainInterval, 1,
   76.42 @@ -2684,9 +2685,10 @@
   76.43          describe_range_error(errcode);
   76.44          return JNI_EINVAL;
   76.45        }
   76.46 +      set_min_heap_size((uintx)long_initial_heap_size);
   76.47 +      // Currently the minimum size and the initial heap sizes are the same.
   76.48 +      // Can be overridden with -XX:InitialHeapSize.
   76.49        FLAG_SET_CMDLINE(uintx, InitialHeapSize, (uintx)long_initial_heap_size);
   76.50 -      // Currently the minimum size and the initial heap sizes are the same.
   76.51 -      set_min_heap_size(InitialHeapSize);
   76.52      // -Xmx
   76.53      } else if (match_option(option, "-Xmx", &tail) || match_option(option, "-XX:MaxHeapSize=", &tail)) {
   76.54        julong long_max_heap_size = 0;
   76.55 @@ -3646,6 +3648,11 @@
   76.56          "Incompatible compilation policy selected", NULL);
   76.57      }
   76.58    }
   76.59 +  // Set NmethodSweepFraction after the size of the code cache is adapted (in case of tiered)
   76.60 +  if (FLAG_IS_DEFAULT(NmethodSweepFraction)) {
   76.61 +    FLAG_SET_DEFAULT(NmethodSweepFraction, 1 + ReservedCodeCacheSize / (16 * M));
   76.62 +  }
   76.63 +
   76.64  
   76.65    // Set heap size based on available physical memory
   76.66    set_heap_size();
    77.1 --- a/src/share/vm/runtime/globals.hpp	Wed Nov 20 11:08:09 2013 -0800
    77.2 +++ b/src/share/vm/runtime/globals.hpp	Thu Nov 21 12:30:35 2013 -0800
    77.3 @@ -2973,6 +2973,9 @@
    77.4    product(intx, MaxRecursiveInlineLevel, 1,                                 \
    77.5            "maximum number of nested recursive calls that are inlined")      \
    77.6                                                                              \
    77.7 +  develop(intx, MaxForceInlineLevel, 100,                                   \
    77.8 +          "maximum number of nested @ForceInline calls that are inlined")   \
    77.9 +                                                                            \
   77.10    product_pd(intx, InlineSmallCode,                                         \
   77.11            "Only inline already compiled methods if their code size is "     \
   77.12            "less than this")                                                 \
   77.13 @@ -3038,9 +3041,6 @@
   77.14    notproduct(intx, ZombieALotInterval,     5,                               \
   77.15            "Number of exits until ZombieALot kicks in")                      \
   77.16                                                                              \
   77.17 -  develop(bool, StressNonEntrant, false,                                    \
   77.18 -          "Mark nmethods non-entrant at registration")                      \
   77.19 -                                                                            \
   77.20    diagnostic(intx, MallocVerifyInterval,     0,                             \
   77.21            "If non-zero, verify C heap after every N calls to "              \
   77.22            "malloc/realloc/free")                                            \
   77.23 @@ -3309,7 +3309,7 @@
   77.24            "Exit the VM if we fill the code cache")                          \
   77.25                                                                              \
   77.26    product(bool, UseCodeCacheFlushing, true,                                 \
   77.27 -          "Attempt to clean the code cache before shutting off compiler")   \
   77.28 +          "Remove cold/old nmethods from the code cache")                   \
   77.29                                                                              \
   77.30    /* interpreter debugging */                                               \
   77.31    develop(intx, BinarySwitchThreshold, 5,                                   \
    78.1 --- a/src/share/vm/runtime/sweeper.cpp	Wed Nov 20 11:08:09 2013 -0800
    78.2 +++ b/src/share/vm/runtime/sweeper.cpp	Thu Nov 21 12:30:35 2013 -0800
    78.3 @@ -112,14 +112,13 @@
    78.4    if (_records != NULL) {
    78.5      _records[_sweep_index].traversal = _traversals;
    78.6      _records[_sweep_index].traversal_mark = nm->_stack_traversal_mark;
    78.7 -    _records[_sweep_index].invocation = _invocations;
    78.8 +    _records[_sweep_index].invocation = _sweep_fractions_left;
    78.9      _records[_sweep_index].compile_id = nm->compile_id();
   78.10      _records[_sweep_index].kind = nm->compile_kind();
   78.11      _records[_sweep_index].state = nm->_state;
   78.12      _records[_sweep_index].vep = nm->verified_entry_point();
   78.13      _records[_sweep_index].uep = nm->entry_point();
   78.14      _records[_sweep_index].line = line;
   78.15 -
   78.16      _sweep_index = (_sweep_index + 1) % SweeperLogEntries;
   78.17    }
   78.18  }
   78.19 @@ -127,26 +126,29 @@
   78.20  #define SWEEP(nm)
   78.21  #endif
   78.22  
   78.23 -nmethod*  NMethodSweeper::_current         = NULL; // Current nmethod
   78.24 -long      NMethodSweeper::_traversals      = 0;    // Nof. stack traversals performed
   78.25 -int       NMethodSweeper::_seen            = 0;    // Nof. nmethods we have currently processed in current pass of CodeCache
   78.26 -int       NMethodSweeper::_flushed_count   = 0;    // Nof. nmethods flushed in current sweep
   78.27 -int       NMethodSweeper::_zombified_count = 0;    // Nof. nmethods made zombie in current sweep
   78.28 -int       NMethodSweeper::_marked_count    = 0;    // Nof. nmethods marked for reclaim in current sweep
   78.29 +nmethod* NMethodSweeper::_current                      = NULL; // Current nmethod
   78.30 +long     NMethodSweeper::_traversals                   = 0;    // Stack scan count, also sweep ID.
   78.31 +long     NMethodSweeper::_time_counter                 = 0;    // Virtual time used to periodically invoke sweeper
   78.32 +long     NMethodSweeper::_last_sweep                   = 0;    // Value of _time_counter when the last sweep happened
   78.33 +int      NMethodSweeper::_seen                         = 0;    // Nof. nmethod we have currently processed in current pass of CodeCache
   78.34 +int      NMethodSweeper::_flushed_count                = 0;    // Nof. nmethods flushed in current sweep
   78.35 +int      NMethodSweeper::_zombified_count              = 0;    // Nof. nmethods made zombie in current sweep
   78.36 +int      NMethodSweeper::_marked_for_reclamation_count = 0;    // Nof. nmethods marked for reclaim in current sweep
   78.37  
   78.38 -volatile int NMethodSweeper::_invocations   = 0; // Nof. invocations left until we are completed with this pass
   78.39 -volatile int NMethodSweeper::_sweep_started = 0; // Whether a sweep is in progress.
   78.40 +volatile bool NMethodSweeper::_should_sweep            = true; // Indicates if we should invoke the sweeper
   78.41 +volatile int  NMethodSweeper::_sweep_fractions_left    = 0;    // Nof. invocations left until we are completed with this pass
   78.42 +volatile int  NMethodSweeper::_sweep_started           = 0;    // Flag to control conc sweeper
   78.43 +volatile int  NMethodSweeper::_bytes_changed           = 0;    // Counts the total nmethod size if the nmethod changed from:
   78.44 +                                                               //   1) alive       -> not_entrant
   78.45 +                                                               //   2) not_entrant -> zombie
   78.46 +                                                               //   3) zombie      -> marked_for_reclamation
   78.47  
   78.48 -jint      NMethodSweeper::_locked_seen               = 0;
   78.49 -jint      NMethodSweeper::_not_entrant_seen_on_stack = 0;
   78.50 -bool      NMethodSweeper::_request_mark_phase        = false;
   78.51 -
   78.52 -int       NMethodSweeper::_total_nof_methods_reclaimed = 0;
   78.53 -jlong     NMethodSweeper::_total_time_sweeping         = 0;
   78.54 -jlong     NMethodSweeper::_total_time_this_sweep       = 0;
   78.55 -jlong     NMethodSweeper::_peak_sweep_time             = 0;
   78.56 -jlong     NMethodSweeper::_peak_sweep_fraction_time    = 0;
   78.57 -int       NMethodSweeper::_hotness_counter_reset_val   = 0;
   78.58 +int   NMethodSweeper::_total_nof_methods_reclaimed     = 0;    // Accumulated nof methods flushed
   78.59 +jlong NMethodSweeper::_total_time_sweeping             = 0;    // Accumulated time sweeping
   78.60 +jlong NMethodSweeper::_total_time_this_sweep           = 0;    // Total time this sweep
   78.61 +jlong NMethodSweeper::_peak_sweep_time                 = 0;    // Peak time for a full sweep
   78.62 +jlong NMethodSweeper::_peak_sweep_fraction_time        = 0;    // Peak time sweeping one fraction
   78.63 +int   NMethodSweeper::_hotness_counter_reset_val       = 0;
   78.64  
   78.65  
   78.66  class MarkActivationClosure: public CodeBlobClosure {
   78.67 @@ -197,13 +199,16 @@
   78.68      return;
   78.69    }
   78.70  
   78.71 +  // Increase time so that we can estimate when to invoke the sweeper again.
   78.72 +  _time_counter++;
   78.73 +
   78.74    // Check for restart
   78.75    assert(CodeCache::find_blob_unsafe(_current) == _current, "Sweeper nmethod cached state invalid");
   78.76 -  if (!sweep_in_progress() && need_marking_phase()) {
   78.77 -    _seen        = 0;
   78.78 -    _invocations = NmethodSweepFraction;
   78.79 -    _current     = CodeCache::first_nmethod();
   78.80 -    _traversals  += 1;
   78.81 +  if (!sweep_in_progress()) {
   78.82 +    _seen = 0;
   78.83 +    _sweep_fractions_left = NmethodSweepFraction;
   78.84 +    _current = CodeCache::first_nmethod();
   78.85 +    _traversals += 1;
   78.86      _total_time_this_sweep = 0;
   78.87  
   78.88      if (PrintMethodFlushing) {
   78.89 @@ -211,10 +216,6 @@
   78.90      }
   78.91      Threads::nmethods_do(&mark_activation_closure);
   78.92  
   78.93 -    // reset the flags since we started a scan from the beginning.
   78.94 -    reset_nmethod_marking();
   78.95 -    _locked_seen = 0;
   78.96 -    _not_entrant_seen_on_stack = 0;
   78.97    } else {
   78.98      // Only set hotness counter
   78.99      Threads::nmethods_do(&set_hotness_closure);
  78.100 @@ -222,14 +223,48 @@
  78.101  
  78.102    OrderAccess::storestore();
  78.103  }
  78.104 -
  78.105 +/**
  78.106 + * This function invokes the sweeper if at least one of the three conditions is met:
  78.107 + *    (1) The code cache is getting full
  78.108 + *    (2) There are sufficient state changes in/since the last sweep.
  78.109 + *    (3) We have not been sweeping for 'some time'
  78.110 + */
  78.111  void NMethodSweeper::possibly_sweep() {
  78.112    assert(JavaThread::current()->thread_state() == _thread_in_vm, "must run in vm mode");
  78.113    if (!MethodFlushing || !sweep_in_progress()) {
  78.114      return;
  78.115    }
  78.116  
  78.117 -  if (_invocations > 0) {
  78.118 +  // If there was no state change while nmethod sweeping, 'should_sweep' will be false.
  78.119 +  // This is one of the two places where should_sweep can be set to true. The general
  78.120 +  // idea is as follows: If there is enough free space in the code cache, there is no
  78.121 +  // need to invoke the sweeper. The following formula (which determines whether to invoke
  78.122 +  // the sweeper or not) depends on the assumption that for larger ReservedCodeCacheSizes
  78.123 +  // we need less frequent sweeps than for smaller ReservedCodecCacheSizes. Furthermore,
  78.124 +  // the formula considers how much space in the code cache is currently used. Here are
  78.125 +  // some examples that will (hopefully) help in understanding.
  78.126 +  //
  78.127 +  // Small ReservedCodeCacheSizes:  (e.g., < 16M) We invoke the sweeper every time, since
  78.128 +  //                                              the result of the division is 0. This
  78.129 +  //                                              keeps the used code cache size small
  78.130 +  //                                              (important for embedded Java)
  78.131 +  // Large ReservedCodeCacheSize :  (e.g., 256M + code cache is 10% full). The formula
  78.132 +  //                                              computes: (256 / 16) - 1 = 15
  78.133 +  //                                              As a result, we invoke the sweeper after
  78.134 +  //                                              15 invocations of 'mark_active_nmethods.
  78.135 +  // Large ReservedCodeCacheSize:   (e.g., 256M + code Cache is 90% full). The formula
  78.136 +  //                                              computes: (256 / 16) - 10 = 6.
  78.137 +  if (!_should_sweep) {
  78.138 +    int time_since_last_sweep = _time_counter - _last_sweep;
  78.139 +    double wait_until_next_sweep = (ReservedCodeCacheSize / (16 * M)) - time_since_last_sweep -
  78.140 +                                CodeCache::reverse_free_ratio();
  78.141 +
  78.142 +    if ((wait_until_next_sweep <= 0.0) || !CompileBroker::should_compile_new_jobs()) {
  78.143 +      _should_sweep = true;
  78.144 +    }
  78.145 +  }
  78.146 +
  78.147 +  if (_should_sweep && _sweep_fractions_left > 0) {
  78.148      // Only one thread at a time will sweep
  78.149      jint old = Atomic::cmpxchg( 1, &_sweep_started, 0 );
  78.150      if (old != 0) {
  78.151 @@ -242,31 +277,46 @@
  78.152        memset(_records, 0, sizeof(SweeperRecord) * SweeperLogEntries);
  78.153      }
  78.154  #endif
  78.155 -    if (_invocations > 0) {
  78.156 +
  78.157 +    if (_sweep_fractions_left > 0) {
  78.158        sweep_code_cache();
  78.159 -      _invocations--;
  78.160 +      _sweep_fractions_left--;
  78.161 +    }
  78.162 +
  78.163 +    // We are done with sweeping the code cache once.
  78.164 +    if (_sweep_fractions_left == 0) {
  78.165 +      _last_sweep = _time_counter;
  78.166 +      // Reset flag; temporarily disables sweeper
  78.167 +      _should_sweep = false;
  78.168 +      // If there was enough state change, 'possibly_enable_sweeper()'
  78.169 +      // sets '_should_sweep' to true
  78.170 +      possibly_enable_sweeper();
  78.171 +      // Reset _bytes_changed only if there was enough state change. _bytes_changed
  78.172 +      // can further increase by calls to 'report_state_change'.
  78.173 +      if (_should_sweep) {
  78.174 +        _bytes_changed = 0;
  78.175 +      }
  78.176      }
  78.177      _sweep_started = 0;
  78.178    }
  78.179  }
  78.180  
  78.181  void NMethodSweeper::sweep_code_cache() {
  78.182 -
  78.183    jlong sweep_start_counter = os::elapsed_counter();
  78.184  
  78.185 -  _flushed_count   = 0;
  78.186 -  _zombified_count = 0;
  78.187 -  _marked_count    = 0;
  78.188 +  _flushed_count                = 0;
  78.189 +  _zombified_count              = 0;
  78.190 +  _marked_for_reclamation_count = 0;
  78.191  
  78.192    if (PrintMethodFlushing && Verbose) {
  78.193 -    tty->print_cr("### Sweep at %d out of %d. Invocations left: %d", _seen, CodeCache::nof_nmethods(), _invocations);
  78.194 +    tty->print_cr("### Sweep at %d out of %d. Invocations left: %d", _seen, CodeCache::nof_nmethods(), _sweep_fractions_left);
  78.195    }
  78.196  
  78.197    if (!CompileBroker::should_compile_new_jobs()) {
  78.198      // If we have turned off compilations we might as well do full sweeps
  78.199      // in order to reach the clean state faster. Otherwise the sleeping compiler
  78.200      // threads will slow down sweeping.
  78.201 -    _invocations = 1;
  78.202 +    _sweep_fractions_left = 1;
  78.203    }
  78.204  
  78.205    // We want to visit all nmethods after NmethodSweepFraction
  78.206 @@ -274,7 +324,7 @@
  78.207    // remaining number of invocations.  This is only an estimate since
  78.208    // the number of nmethods changes during the sweep so the final
  78.209    // stage must iterate until it there are no more nmethods.
  78.210 -  int todo = (CodeCache::nof_nmethods() - _seen) / _invocations;
  78.211 +  int todo = (CodeCache::nof_nmethods() - _seen) / _sweep_fractions_left;
  78.212    int swept_count = 0;
  78.213  
  78.214  
  78.215 @@ -286,11 +336,11 @@
  78.216      MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
  78.217  
  78.218      // The last invocation iterates until there are no more nmethods
  78.219 -    for (int i = 0; (i < todo || _invocations == 1) && _current != NULL; i++) {
  78.220 +    for (int i = 0; (i < todo || _sweep_fractions_left == 1) && _current != NULL; i++) {
  78.221        swept_count++;
  78.222        if (SafepointSynchronize::is_synchronizing()) { // Safepoint request
  78.223          if (PrintMethodFlushing && Verbose) {
  78.224 -          tty->print_cr("### Sweep at %d out of %d, invocation: %d, yielding to safepoint", _seen, CodeCache::nof_nmethods(), _invocations);
  78.225 +          tty->print_cr("### Sweep at %d out of %d, invocation: %d, yielding to safepoint", _seen, CodeCache::nof_nmethods(), _sweep_fractions_left);
  78.226          }
  78.227          MutexUnlockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
  78.228  
  78.229 @@ -314,19 +364,7 @@
  78.230      }
  78.231    }
  78.232  
  78.233 -  assert(_invocations > 1 || _current == NULL, "must have scanned the whole cache");
  78.234 -
  78.235 -  if (!sweep_in_progress() && !need_marking_phase() && (_locked_seen || _not_entrant_seen_on_stack)) {
  78.236 -    // we've completed a scan without making progress but there were
  78.237 -    // nmethods we were unable to process either because they were
  78.238 -    // locked or were still on stack. We don't have to aggressively
  78.239 -    // clean them up so just stop scanning. We could scan once more
  78.240 -    // but that complicates the control logic and it's unlikely to
  78.241 -    // matter much.
  78.242 -    if (PrintMethodFlushing) {
  78.243 -      tty->print_cr("### Couldn't make progress on some nmethods so stopping sweep");
  78.244 -    }
  78.245 -  }
  78.246 +  assert(_sweep_fractions_left > 1 || _current == NULL, "must have scanned the whole cache");
  78.247  
  78.248    jlong sweep_end_counter = os::elapsed_counter();
  78.249    jlong sweep_time = sweep_end_counter - sweep_start_counter;
  78.250 @@ -340,21 +378,21 @@
  78.251      event.set_starttime(sweep_start_counter);
  78.252      event.set_endtime(sweep_end_counter);
  78.253      event.set_sweepIndex(_traversals);
  78.254 -    event.set_sweepFractionIndex(NmethodSweepFraction - _invocations + 1);
  78.255 +    event.set_sweepFractionIndex(NmethodSweepFraction - _sweep_fractions_left + 1);
  78.256      event.set_sweptCount(swept_count);
  78.257      event.set_flushedCount(_flushed_count);
  78.258 -    event.set_markedCount(_marked_count);
  78.259 +    event.set_markedCount(_marked_for_reclamation_count);
  78.260      event.set_zombifiedCount(_zombified_count);
  78.261      event.commit();
  78.262    }
  78.263  
  78.264  #ifdef ASSERT
  78.265    if(PrintMethodFlushing) {
  78.266 -    tty->print_cr("### sweeper:      sweep time(%d): " INT64_FORMAT, _invocations, (jlong)sweep_time);
  78.267 +    tty->print_cr("### sweeper:      sweep time(%d): " INT64_FORMAT, _sweep_fractions_left, (jlong)sweep_time);
  78.268    }
  78.269  #endif
  78.270  
  78.271 -  if (_invocations == 1) {
  78.272 +  if (_sweep_fractions_left == 1) {
  78.273      _peak_sweep_time = MAX2(_peak_sweep_time, _total_time_this_sweep);
  78.274      log_sweep("finished");
  78.275    }
  78.276 @@ -368,12 +406,37 @@
  78.277    // it only makes sense to re-enable compilation if we have actually freed memory.
  78.278    // Note that typically several kB are released for sweeping 16MB of the code
  78.279    // cache. As a result, 'freed_memory' > 0 to restart the compiler.
  78.280 -  if (UseCodeCacheFlushing && (!CompileBroker::should_compile_new_jobs() && (freed_memory > 0))) {
  78.281 +  if (!CompileBroker::should_compile_new_jobs() && (freed_memory > 0)) {
  78.282      CompileBroker::set_should_compile_new_jobs(CompileBroker::run_compilation);
  78.283      log_sweep("restart_compiler");
  78.284    }
  78.285  }
  78.286  
  78.287 +/**
  78.288 + * This function updates the sweeper statistics that keep track of nmethods
  78.289 + * state changes. If there is 'enough' state change, the sweeper is invoked
  78.290 + * as soon as possible. There can be data races on _bytes_changed. The data
  78.291 + * races are benign, since it does not matter if we loose a couple of bytes.
  78.292 + * In the worst case we call the sweeper a little later. Also, we are guaranteed
  78.293 + * to invoke the sweeper if the code cache gets full.
  78.294 + */
  78.295 +void NMethodSweeper::report_state_change(nmethod* nm) {
  78.296 +  _bytes_changed += nm->total_size();
  78.297 +  possibly_enable_sweeper();
  78.298 +}
  78.299 +
  78.300 +/**
  78.301 + * Function determines if there was 'enough' state change in the code cache to invoke
  78.302 + * the sweeper again. Currently, we determine 'enough' as more than 1% state change in
  78.303 + * the code cache since the last sweep.
  78.304 + */
  78.305 +void NMethodSweeper::possibly_enable_sweeper() {
  78.306 +  double percent_changed = ((double)_bytes_changed / (double)ReservedCodeCacheSize) * 100;
  78.307 +  if (percent_changed > 1.0) {
  78.308 +    _should_sweep = true;
  78.309 +  }
  78.310 +}
  78.311 +
  78.312  class NMethodMarker: public StackObj {
  78.313   private:
  78.314    CompilerThread* _thread;
  78.315 @@ -424,9 +487,6 @@
  78.316        MutexLocker cl(CompiledIC_lock);
  78.317        nm->cleanup_inline_caches();
  78.318        SWEEP(nm);
  78.319 -    } else {
  78.320 -      _locked_seen++;
  78.321 -      SWEEP(nm);
  78.322      }
  78.323      return freed_memory;
  78.324    }
  78.325 @@ -448,8 +508,9 @@
  78.326          tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (zombie) being marked for reclamation", nm->compile_id(), nm);
  78.327        }
  78.328        nm->mark_for_reclamation();
  78.329 -      request_nmethod_marking();
  78.330 -      _marked_count++;
  78.331 +      // Keep track of code cache state change
  78.332 +      _bytes_changed += nm->total_size();
  78.333 +      _marked_for_reclamation_count++;
  78.334        SWEEP(nm);
  78.335      }
  78.336    } else if (nm->is_not_entrant()) {
  78.337 @@ -459,18 +520,14 @@
  78.338        if (PrintMethodFlushing && Verbose) {
  78.339          tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (not entrant) being made zombie", nm->compile_id(), nm);
  78.340        }
  78.341 +      // Code cache state change is tracked in make_zombie()
  78.342        nm->make_zombie();
  78.343 -      request_nmethod_marking();
  78.344        _zombified_count++;
  78.345        SWEEP(nm);
  78.346      } else {
  78.347        // Still alive, clean up its inline caches
  78.348        MutexLocker cl(CompiledIC_lock);
  78.349        nm->cleanup_inline_caches();
  78.350 -      // we coudn't transition this nmethod so don't immediately
  78.351 -      // request a rescan.  If this method stays on the stack for a
  78.352 -      // long time we don't want to keep rescanning the code cache.
  78.353 -      _not_entrant_seen_on_stack++;
  78.354        SWEEP(nm);
  78.355      }
  78.356    } else if (nm->is_unloaded()) {
  78.357 @@ -485,8 +542,8 @@
  78.358        release_nmethod(nm);
  78.359        _flushed_count++;
  78.360      } else {
  78.361 +      // Code cache state change is tracked in make_zombie()
  78.362        nm->make_zombie();
  78.363 -      request_nmethod_marking();
  78.364        _zombified_count++;
  78.365        SWEEP(nm);
  78.366      }
  78.367 @@ -514,7 +571,11 @@
  78.368            //    The second condition ensures that methods are not immediately made not-entrant
  78.369            //    after compilation.
  78.370            nm->make_not_entrant();
  78.371 -          request_nmethod_marking();
  78.372 +          // Code cache state change is tracked in make_not_entrant()
  78.373 +          if (PrintMethodFlushing && Verbose) {
  78.374 +            tty->print_cr("### Nmethod %d/" PTR_FORMAT "made not-entrant: hotness counter %d/%d threshold %f",
  78.375 +                          nm->compile_id(), nm, nm->hotness_counter(), reset_val, threshold);
  78.376 +          }
  78.377          }
  78.378        }
  78.379      }
    79.1 --- a/src/share/vm/runtime/sweeper.hpp	Wed Nov 20 11:08:09 2013 -0800
    79.2 +++ b/src/share/vm/runtime/sweeper.hpp	Thu Nov 21 12:30:35 2013 -0800
    79.3 @@ -53,22 +53,22 @@
    79.4  //     is full.
    79.5  
    79.6  class NMethodSweeper : public AllStatic {
    79.7 -  static long      _traversals;      // Stack scan count, also sweep ID.
    79.8 -  static nmethod*  _current;         // Current nmethod
    79.9 -  static int       _seen;            // Nof. nmethod we have currently processed in current pass of CodeCache
   79.10 -  static int       _flushed_count;   // Nof. nmethods flushed in current sweep
   79.11 -  static int       _zombified_count; // Nof. nmethods made zombie in current sweep
   79.12 -  static int       _marked_count;    // Nof. nmethods marked for reclaim in current sweep
   79.13 +  static long      _traversals;                   // Stack scan count, also sweep ID.
   79.14 +  static long      _time_counter;                 // Virtual time used to periodically invoke sweeper
   79.15 +  static long      _last_sweep;                   // Value of _time_counter when the last sweep happened
   79.16 +  static nmethod*  _current;                      // Current nmethod
   79.17 +  static int       _seen;                         // Nof. nmethod we have currently processed in current pass of CodeCache
   79.18 +  static int       _flushed_count;                // Nof. nmethods flushed in current sweep
   79.19 +  static int       _zombified_count;              // Nof. nmethods made zombie in current sweep
   79.20 +  static int       _marked_for_reclamation_count; // Nof. nmethods marked for reclaim in current sweep
   79.21  
   79.22 -  static volatile int  _invocations;   // No. of invocations left until we are completed with this pass
   79.23 -  static volatile int  _sweep_started; // Flag to control conc sweeper
   79.24 -
   79.25 -  //The following are reset in mark_active_nmethods and synchronized by the safepoint
   79.26 -  static bool      _request_mark_phase;        // Indicates that a change has happend and we need another mark pahse,
   79.27 -                                               // always checked and reset at a safepoint so memory will be in sync.
   79.28 -  static int       _locked_seen;               // Number of locked nmethods encountered during the scan
   79.29 -  static int       _not_entrant_seen_on_stack; // Number of not entrant nmethod were are still on stack
   79.30 -
   79.31 +  static volatile int  _sweep_fractions_left;     // Nof. invocations left until we are completed with this pass
   79.32 +  static volatile int  _sweep_started;            // Flag to control conc sweeper
   79.33 +  static volatile bool _should_sweep;             // Indicates if we should invoke the sweeper
   79.34 +  static volatile int _bytes_changed;             // Counts the total nmethod size if the nmethod changed from:
   79.35 +                                                  //   1) alive       -> not_entrant
   79.36 +                                                  //   2) not_entrant -> zombie
   79.37 +                                                  //   3) zombie      -> marked_for_reclamation
   79.38    // Stat counters
   79.39    static int       _total_nof_methods_reclaimed;  // Accumulated nof methods flushed
   79.40    static jlong     _total_time_sweeping;          // Accumulated time sweeping
   79.41 @@ -81,9 +81,6 @@
   79.42  
   79.43    static bool sweep_in_progress();
   79.44    static void sweep_code_cache();
   79.45 -  static void request_nmethod_marking() { _request_mark_phase = true; }
   79.46 -  static void reset_nmethod_marking()   { _request_mark_phase = false; }
   79.47 -  static bool need_marking_phase()      { return _request_mark_phase; }
   79.48  
   79.49    static int _hotness_counter_reset_val;
   79.50  
   79.51 @@ -109,13 +106,8 @@
   79.52  
   79.53    static int sort_nmethods_by_hotness(nmethod** nm1, nmethod** nm2);
   79.54    static int hotness_counter_reset_val();
   79.55 -
   79.56 -  static void notify() {
   79.57 -    // Request a new sweep of the code cache from the beginning. No
   79.58 -    // need to synchronize the setting of this flag since it only
   79.59 -    // changes to false at safepoint so we can never overwrite it with false.
   79.60 -     request_nmethod_marking();
   79.61 -  }
   79.62 +  static void report_state_change(nmethod* nm);
   79.63 +  static void possibly_enable_sweeper();
   79.64  };
   79.65  
   79.66  #endif // SHARE_VM_RUNTIME_SWEEPER_HPP
    80.1 --- a/src/share/vm/utilities/globalDefinitions.hpp	Wed Nov 20 11:08:09 2013 -0800
    80.2 +++ b/src/share/vm/utilities/globalDefinitions.hpp	Thu Nov 21 12:30:35 2013 -0800
    80.3 @@ -459,6 +459,13 @@
    80.4    return (void*) align_size_up_((uintptr_t)addr, size);
    80.5  }
    80.6  
    80.7 +// Align down with a lower bound. If the aligning results in 0, return 'alignment'.
    80.8 +
    80.9 +inline size_t align_size_down_bounded(size_t size, size_t alignment) {
   80.10 +  size_t aligned_size = align_size_down_(size, alignment);
   80.11 +  return aligned_size > 0 ? aligned_size : alignment;
   80.12 +}
   80.13 +
   80.14  // Clamp an address to be within a specific page
   80.15  // 1. If addr is on the page it is returned as is
   80.16  // 2. If addr is above the page_address the start of the *next* page will be returned
    81.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    81.2 +++ b/test/compiler/intrinsics/mathexact/CompareTest.java	Thu Nov 21 12:30:35 2013 -0800
    81.3 @@ -0,0 +1,61 @@
    81.4 +/*
    81.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    81.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    81.7 + *
    81.8 + * This code is free software; you can redistribute it and/or modify it
    81.9 + * under the terms of the GNU General Public License version 2 only, as
   81.10 + * published by the Free Software Foundation.
   81.11 + *
   81.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   81.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   81.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   81.15 + * version 2 for more details (a copy is included in the LICENSE file that
   81.16 + * accompanied this code).
   81.17 + *
   81.18 + * You should have received a copy of the GNU General Public License version
   81.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   81.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   81.21 + *
   81.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   81.23 + * or visit www.oracle.com if you need additional information or have any
   81.24 + * questions.
   81.25 + */
   81.26 +
   81.27 +/*
   81.28 + * @test
   81.29 + * @bug 8026722
   81.30 + * @summary Verify that the compare after addExact is a signed compare
   81.31 + * @compile CompareTest.java
   81.32 + * @run main CompareTest
   81.33 + *
   81.34 + */
   81.35 +
   81.36 +public class CompareTest {
   81.37 +    public static long store = 0;
   81.38 +    public static long addValue = 1231;
   81.39 +
   81.40 +    public static void main(String[] args) {
   81.41 +        for (int i = 0; i < 20000; ++i) {
   81.42 +            runTest(i, i);
   81.43 +            runTest(i-1, i);
   81.44 +        }
   81.45 +    }
   81.46 +
   81.47 +    public static long create(long value, int v) {
   81.48 +        if ((value | v) == 0) {
   81.49 +            return 0;
   81.50 +        }
   81.51 +
   81.52 +        // C2 turned this test into unsigned test when a control edge was set on the Cmp
   81.53 +        if (value < -31557014167219200L || value > 31556889864403199L) {
   81.54 +            throw new RuntimeException("error");
   81.55 +        }
   81.56 +
   81.57 +        return value;
   81.58 +    }
   81.59 +
   81.60 +    public static void runTest(long value, int value2) {
   81.61 +        long res = Math.addExact(value, addValue);
   81.62 +        store = create(res, Math.floorMod(value2, 100000));
   81.63 +    }
   81.64 +}
    82.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    82.2 +++ b/test/compiler/intrinsics/mathexact/GVNTest.java	Thu Nov 21 12:30:35 2013 -0800
    82.3 @@ -0,0 +1,60 @@
    82.4 +/*
    82.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    82.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    82.7 + *
    82.8 + * This code is free software; you can redistribute it and/or modify it
    82.9 + * under the terms of the GNU General Public License version 2 only, as
   82.10 + * published by the Free Software Foundation.
   82.11 + *
   82.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   82.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   82.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   82.15 + * version 2 for more details (a copy is included in the LICENSE file that
   82.16 + * accompanied this code).
   82.17 + *
   82.18 + * You should have received a copy of the GNU General Public License version
   82.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   82.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   82.21 + *
   82.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   82.23 + * or visit www.oracle.com if you need additional information or have any
   82.24 + * questions.
   82.25 + */
   82.26 +
   82.27 +/*
   82.28 + * @test
   82.29 + * @bug 8028207
   82.30 + * @summary Verify that GVN doesn't mess up the two addExacts
   82.31 + * @compile GVNTest.java
   82.32 + * @run main GVNTest
   82.33 + *
   82.34 + */
   82.35 +
   82.36 +public class GVNTest {
   82.37 +  public static int result = 0;
   82.38 +  public static int value = 93;
   82.39 +  public static void main(String[] args) {
   82.40 +    for (int i = 0; i < 50000; ++i) {
   82.41 +      result = runTest(value + i);
   82.42 +      result = runTest(value + i);
   82.43 +      result = runTest(value + i);
   82.44 +      result = runTest(value + i);
   82.45 +      result = runTest(value + i);
   82.46 +    }
   82.47 +  }
   82.48 +
   82.49 +  public static int runTest(int value) {
   82.50 +    int v = value + value;
   82.51 +    int sum = 0;
   82.52 +    if (v < 4032) {
   82.53 +      for (int i = 0; i < 1023; ++i) {
   82.54 +        sum += Math.addExact(value, value);
   82.55 +      }
   82.56 +    } else {
   82.57 +      for (int i = 0; i < 321; ++i) {
   82.58 +        sum += Math.addExact(value, value);
   82.59 +      }
   82.60 +    }
   82.61 +    return sum + v;
   82.62 +  }
   82.63 +}
    83.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    83.2 +++ b/test/compiler/intrinsics/mathexact/SplitThruPhiTest.java	Thu Nov 21 12:30:35 2013 -0800
    83.3 @@ -0,0 +1,50 @@
    83.4 +/*
    83.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    83.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    83.7 + *
    83.8 + * This code is free software; you can redistribute it and/or modify it
    83.9 + * under the terms of the GNU General Public License version 2 only, as
   83.10 + * published by the Free Software Foundation.
   83.11 + *
   83.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   83.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   83.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   83.15 + * version 2 for more details (a copy is included in the LICENSE file that
   83.16 + * accompanied this code).
   83.17 + *
   83.18 + * You should have received a copy of the GNU General Public License version
   83.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   83.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   83.21 + *
   83.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   83.23 + * or visit www.oracle.com if you need additional information or have any
   83.24 + * questions.
   83.25 + */
   83.26 +
   83.27 +/*
   83.28 + * @test
   83.29 + * @bug 8028198
   83.30 + * @summary Verify that split through phi does the right thing
   83.31 + * @compile SplitThruPhiTest.java
   83.32 + * @run main SplitThruPhiTest
   83.33 + *
   83.34 + */
   83.35 +
   83.36 +public class SplitThruPhiTest {
   83.37 +  public static volatile int value = 19;
   83.38 +  public static int store = 0;
   83.39 +  public static void main(String[] args) {
   83.40 +    for (int i = 0; i < 150000; ++i) {
   83.41 +      store = runTest(value);
   83.42 +    }
   83.43 +  }
   83.44 +
   83.45 +  public static int runTest(int val) {
   83.46 +    int result = Math.addExact(val, 1);
   83.47 +    int total = 0;
   83.48 +    for (int i = val; i < 200; i = Math.addExact(i, 1)) {
   83.49 +      total += i;
   83.50 +    }
   83.51 +    return total;
   83.52 +  }
   83.53 +}
    84.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    84.2 +++ b/test/compiler/intrinsics/stringequals/TestStringEqualsBadLength.java	Thu Nov 21 12:30:35 2013 -0800
    84.3 @@ -0,0 +1,82 @@
    84.4 +/*
    84.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    84.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    84.7 + *
    84.8 + * This code is free software; you can redistribute it and/or modify it
    84.9 + * under the terms of the GNU General Public License version 2 only, as
   84.10 + * published by the Free Software Foundation.
   84.11 + *
   84.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   84.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   84.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   84.15 + * version 2 for more details (a copy is included in the LICENSE file that
   84.16 + * accompanied this code).
   84.17 + *
   84.18 + * You should have received a copy of the GNU General Public License version
   84.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   84.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   84.21 + *
   84.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   84.23 + * or visit www.oracle.com if you need additional information or have any
   84.24 + * questions.
   84.25 + */
   84.26 +
   84.27 +/*
   84.28 + * @test
   84.29 + * @bug 8027445
   84.30 + * @summary String.equals() may be called with a length whose upper bits are not cleared
   84.31 + * @run main/othervm -XX:-UseOnStackReplacement -XX:-BackgroundCompilation TestStringEqualsBadLength
   84.32 + *
   84.33 + */
   84.34 +
   84.35 +import java.util.Arrays;
   84.36 +
   84.37 +public class TestStringEqualsBadLength {
   84.38 +
   84.39 +    int v1;
   84.40 +    int v2;
   84.41 +
   84.42 +    boolean m(String s1) {
   84.43 +        int l = v2 - v1; // 0 - (-1) = 1. On 64 bit: 0xffffffff00000001
   84.44 +        char[] arr = new char[l];
   84.45 +        arr[0] = 'a';
   84.46 +        String s2 = new String(arr);
   84.47 +        // The string length is not reloaded but the value computed is
   84.48 +        // reused so pointer computation must not use
   84.49 +        // 0xffffffff00000001
   84.50 +        return s2.equals(s1);
   84.51 +    }
   84.52 +
   84.53 +    // Same thing with String.compareTo()
   84.54 +    int m2(String s1) {
   84.55 +        int l = v2 - v1;
   84.56 +        char[] arr = new char[l+1];
   84.57 +        arr[0] = 'a';
   84.58 +        arr[1] = 'b';
   84.59 +        String s2 = new String(arr);
   84.60 +        return s2.compareTo(s1);
   84.61 +    }
   84.62 +
   84.63 +    // Same thing with equals() for arrays
   84.64 +    boolean m3(char[] arr1) {
   84.65 +        int l = v2 - v1; // 0 - (-1) = 1. On 64 bit: 0xffffffff00000001
   84.66 +        char[] arr2 = new char[l];
   84.67 +        arr2[0] = 'a';
   84.68 +        return Arrays.equals(arr2, arr1);
   84.69 +    }
   84.70 +
   84.71 +    static public void main(String[] args) {
   84.72 +        TestStringEqualsBadLength tse = new TestStringEqualsBadLength();
   84.73 +        tse.v1 = -1;
   84.74 +        tse.v2 = 0;
   84.75 +        char[] arr = new char[1];
   84.76 +        arr[0] = 'a';
   84.77 +        for (int i = 0; i < 20000; i++) {
   84.78 +            tse.m("a");
   84.79 +            tse.m2("ab");
   84.80 +            tse.m3(arr);
   84.81 +        }
   84.82 +
   84.83 +        System.out.println("TEST PASSED");
   84.84 +    }
   84.85 +}
    85.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    85.2 +++ b/test/compiler/profiling/TestUnexpectedProfilingMismatch.java	Thu Nov 21 12:30:35 2013 -0800
    85.3 @@ -0,0 +1,102 @@
    85.4 +/*
    85.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    85.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    85.7 + *
    85.8 + * This code is free software; you can redistribute it and/or modify it
    85.9 + * under the terms of the GNU General Public License version 2 only, as
   85.10 + * published by the Free Software Foundation.
   85.11 + *
   85.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   85.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   85.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   85.15 + * version 2 for more details (a copy is included in the LICENSE file that
   85.16 + * accompanied this code).
   85.17 + *
   85.18 + * You should have received a copy of the GNU General Public License version
   85.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   85.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   85.21 + *
   85.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   85.23 + * or visit www.oracle.com if you need additional information or have any
   85.24 + * questions.
   85.25 + */
   85.26 +
   85.27 +/*
   85.28 + * @test
   85.29 + * @bug 8027631
   85.30 + * @summary profiling of arguments at calls cannot rely on signature of callee for types
   85.31 + * @run main/othervm -XX:-BackgroundCompilation -XX:TieredStopAtLevel=3 -XX:TypeProfileLevel=111 -XX:Tier3InvocationThreshold=200 -XX:Tier0InvokeNotifyFreqLog=7 TestUnexpectedProfilingMismatch
   85.32 + *
   85.33 + */
   85.34 +
   85.35 +import java.lang.invoke.*;
   85.36 +
   85.37 +public class TestUnexpectedProfilingMismatch {
   85.38 +
   85.39 +    static class A {
   85.40 +    }
   85.41 +
   85.42 +    static class B {
   85.43 +    }
   85.44 +
   85.45 +    static void mA(A a) {
   85.46 +    }
   85.47 +
   85.48 +    static void mB(B b) {
   85.49 +    }
   85.50 +
   85.51 +    static final MethodHandle mhA;
   85.52 +    static final MethodHandle mhB;
   85.53 +    static {
   85.54 +        MethodHandles.Lookup lookup = MethodHandles.lookup();
   85.55 +        MethodType mt = MethodType.methodType(void.class, A.class);
   85.56 +        MethodHandle res = null;
   85.57 +        try {
   85.58 +            res = lookup.findStatic(TestUnexpectedProfilingMismatch.class, "mA", mt);
   85.59 +        } catch(NoSuchMethodException ex) {
   85.60 +        } catch(IllegalAccessException ex) {
   85.61 +        }
   85.62 +        mhA = res;
   85.63 +        mt = MethodType.methodType(void.class, B.class);
   85.64 +        try {
   85.65 +            res = lookup.findStatic(TestUnexpectedProfilingMismatch.class, "mB", mt);
   85.66 +        } catch(NoSuchMethodException ex) {
   85.67 +        } catch(IllegalAccessException ex) {
   85.68 +        }
   85.69 +        mhB = res;
   85.70 +    }
   85.71 +
   85.72 +    void m1(A a, boolean doit) throws Throwable {
   85.73 +        if (doit) {
   85.74 +            mhA.invoke(a);
   85.75 +        }
   85.76 +    }
   85.77 +
   85.78 +    void m2(B b) throws Throwable {
   85.79 +        mhB.invoke(b);
   85.80 +    }
   85.81 +
   85.82 +    static public void main(String[] args) {
   85.83 +        TestUnexpectedProfilingMismatch tih = new TestUnexpectedProfilingMismatch();
   85.84 +        A a = new A();
   85.85 +        B b = new B();
   85.86 +        try {
   85.87 +            for (int i = 0; i < 256 - 1; i++) {
   85.88 +                tih.m1(a, true);
   85.89 +            }
   85.90 +            // Will trigger the compilation but will also run once
   85.91 +            // more interpreted with a non null MDO which it will
   85.92 +            // update. Make it skip the body of the method.
   85.93 +            tih.m1(a, false);
   85.94 +            // Compile this one as well and do the profiling
   85.95 +            for (int i = 0; i < 256; i++) {
   85.96 +                tih.m2(b);
   85.97 +            }
   85.98 +            // Will run and see a conflict
   85.99 +            tih.m1(a, true);
  85.100 +        } catch(Throwable ex) {
  85.101 +            ex.printStackTrace();
  85.102 +        }
  85.103 +        System.out.println("TEST PASSED");
  85.104 +    }
  85.105 +}
    86.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    86.2 +++ b/test/compiler/profiling/unloadingconflict/B.java	Thu Nov 21 12:30:35 2013 -0800
    86.3 @@ -0,0 +1,25 @@
    86.4 +/*
    86.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    86.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    86.7 + *
    86.8 + * This code is free software; you can redistribute it and/or modify it
    86.9 + * under the terms of the GNU General Public License version 2 only, as
   86.10 + * published by the Free Software Foundation.
   86.11 + *
   86.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   86.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   86.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   86.15 + * version 2 for more details (a copy is included in the LICENSE file that
   86.16 + * accompanied this code).
   86.17 + *
   86.18 + * You should have received a copy of the GNU General Public License version
   86.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   86.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   86.21 + *
   86.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   86.23 + * or visit www.oracle.com if you need additional information or have any
   86.24 + * questions.
   86.25 + */
   86.26 +
   86.27 +public class B {
   86.28 +}
    87.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    87.2 +++ b/test/compiler/profiling/unloadingconflict/TestProfileConflictClassUnloading.java	Thu Nov 21 12:30:35 2013 -0800
    87.3 @@ -0,0 +1,88 @@
    87.4 +/*
    87.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    87.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    87.7 + *
    87.8 + * This code is free software; you can redistribute it and/or modify it
    87.9 + * under the terms of the GNU General Public License version 2 only, as
   87.10 + * published by the Free Software Foundation.
   87.11 + *
   87.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   87.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   87.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   87.15 + * version 2 for more details (a copy is included in the LICENSE file that
   87.16 + * accompanied this code).
   87.17 + *
   87.18 + * You should have received a copy of the GNU General Public License version
   87.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   87.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   87.21 + *
   87.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   87.23 + * or visit www.oracle.com if you need additional information or have any
   87.24 + * questions.
   87.25 + */
   87.26 +
   87.27 +/*
   87.28 + * @test
   87.29 + * @bug 8027572
   87.30 + * @summary class unloading resets profile, method compiled after the profile is first set and before class loading sets unknown bit with not recorded class
   87.31 + * @build B
   87.32 + * @run main/othervm -XX:TypeProfileLevel=222 -XX:-BackgroundCompilation TestProfileConflictClassUnloading
   87.33 + *
   87.34 + */
   87.35 +
   87.36 +import java.net.MalformedURLException;
   87.37 +import java.net.URL;
   87.38 +import java.net.URLClassLoader;
   87.39 +import java.nio.file.Paths;
   87.40 +
   87.41 +public class TestProfileConflictClassUnloading {
   87.42 +    static class A {
   87.43 +    }
   87.44 +
   87.45 +
   87.46 +    static void m1(Object o) {
   87.47 +    }
   87.48 +
   87.49 +    static void m2(Object o) {
   87.50 +        m1(o);
   87.51 +    }
   87.52 +
   87.53 +    static void m3(A a, boolean do_call) {
   87.54 +        if (!do_call) {
   87.55 +            return;
   87.56 +        }
   87.57 +        m2(a);
   87.58 +    }
   87.59 +
   87.60 +    public static ClassLoader newClassLoader() {
   87.61 +        try {
   87.62 +            return new URLClassLoader(new URL[] {
   87.63 +                    Paths.get(System.getProperty("test.classes",".")).toUri().toURL(),
   87.64 +            }, null);
   87.65 +        } catch (MalformedURLException e){
   87.66 +            throw new RuntimeException("Unexpected URL conversion failure", e);
   87.67 +        }
   87.68 +    }
   87.69 +
   87.70 +    public static void main(String[] args) throws Exception {
   87.71 +        ClassLoader loader = newClassLoader();
   87.72 +        Object o = loader.loadClass("B").newInstance();
   87.73 +        // collect conflicting profiles
   87.74 +        for (int i = 0; i < 5000; i++) {
   87.75 +            m2(o);
   87.76 +        }
   87.77 +        // prepare for conflict
   87.78 +        A a = new A();
   87.79 +        for (int i = 0; i < 5000; i++) {
   87.80 +            m3(a, false);
   87.81 +        }
   87.82 +        // unload class in profile
   87.83 +        o = null;
   87.84 +        loader = null;
   87.85 +        System.gc();
   87.86 +        // record the conflict
   87.87 +        m3(a, true);
   87.88 +        // trigger another GC
   87.89 +        System.gc();
   87.90 +    }
   87.91 +}
    88.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    88.2 +++ b/test/compiler/regalloc/C1ObjectSpillInLogicOp.java	Thu Nov 21 12:30:35 2013 -0800
    88.3 @@ -0,0 +1,45 @@
    88.4 +/*
    88.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    88.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    88.7 + *
    88.8 + * This code is free software; you can redistribute it and/or modify it
    88.9 + * under the terms of the GNU General Public License version 2 only, as
   88.10 + * published by the Free Software Foundation.
   88.11 + *
   88.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   88.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   88.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   88.15 + * version 2 for more details (a copy is included in the LICENSE file that
   88.16 + * accompanied this code).
   88.17 + *
   88.18 + * You should have received a copy of the GNU General Public License version
   88.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   88.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   88.21 + *
   88.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   88.23 + * or visit www.oracle.com if you need additional information or have any
   88.24 + * questions.
   88.25 + */
   88.26 +
   88.27 +/*
   88.28 + * @test
   88.29 + * @bug 8027751
   88.30 + * @summary C1 crashes generating G1 post-barrier in Unsafe.getAndSetObject() intrinsic because of the new value spill
   88.31 + * @run main/othervm -XX:+UseG1GC C1ObjectSpillInLogicOp
   88.32 + *
   88.33 + * G1 barriers use logical operators (xor) on T_OBJECT mixed with T_LONG or T_INT.
   88.34 + * The current implementation of logical operations on x86 in C1 doesn't allow for long operands to be on stack.
   88.35 + * There is a special code in the register allocator that forces long arguments in registers on x86. However T_OBJECT
   88.36 + * can be spilled just fine, and in that case the xor emission will fail.
   88.37 + */
   88.38 +
   88.39 +import java.util.concurrent.atomic.*;
   88.40 +class C1ObjectSpillInLogicOp {
   88.41 +  static public void main(String[] args) {
   88.42 +    AtomicReferenceArray<Integer> x = new AtomicReferenceArray(128);
   88.43 +    Integer y = new Integer(0);
   88.44 +    for (int i = 0; i < 50000; i++) {
   88.45 +      x.getAndSet(i % x.length(), y);
   88.46 +    }
   88.47 +  }
   88.48 +}
    89.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    89.2 +++ b/test/compiler/uncommontrap/UncommonTrapStackBang.java	Thu Nov 21 12:30:35 2013 -0800
    89.3 @@ -0,0 +1,10908 @@
    89.4 +/*
    89.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    89.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    89.7 + *
    89.8 + * This code is free software; you can redistribute it and/or modify it
    89.9 + * under the terms of the GNU General Public License version 2 only, as
   89.10 + * published by the Free Software Foundation.
   89.11 + *
   89.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   89.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   89.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   89.15 + * version 2 for more details (a copy is included in the LICENSE file that
   89.16 + * accompanied this code).
   89.17 + *
   89.18 + * You should have received a copy of the GNU General Public License version
   89.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   89.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   89.21 + *
   89.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   89.23 + * or visit www.oracle.com if you need additional information or have any
   89.24 + * questions.
   89.25 + *
   89.26 + */
   89.27 +
   89.28 +/**
   89.29 + * @test
   89.30 + * @bug 8026775
   89.31 + * @summary Uncommon trap blob did not bang all the stack shadow pages
   89.32 + *
   89.33 + * @run main/othervm -server -XX:+IgnoreUnrecognizedVMOptions -XX:+TieredCompilation UncommonTrapStackBang
   89.34 + * @run main/othervm -server -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation UncommonTrapStackBang
   89.35 + *
   89.36 + *
   89.37 + * Note: This test does not reproduce the problem with absolute
   89.38 + * certainty. Empirically the bug reproduces on Windows some 80+% of
   89.39 + * the time. Setting everything up to fail in 100% of the cases turns
   89.40 + * out to be tricky at best.
   89.41 + *
   89.42 + *
   89.43 + * The goal of this test is to set up the following stack:
   89.44 + *
   89.45 + * doIt()
   89.46 + * eatStack()
   89.47 + * ...
   89.48 + * eatStack()
   89.49 + * run()
   89.50 + *
   89.51 + *
   89.52 + * When doIt() gets executed it will hit an uncommon trap and expand
   89.53 + * into a huge interpreter frame. The doIt method then calls the
   89.54 + * compiled version of StringBuilder.<init>() which does a single
   89.55 + * stack bang StackShadowPages down.
   89.56 + *
   89.57 + * The uncommon trap blob is supposed to prepare for the interpreter
   89.58 + * by pre-touching stack pages. The bug was that it didn't correctly
   89.59 + * pre-touch all the stack shadow pages, leaving a "hole" on the stack
   89.60 + * which raises an exception on Windows when the stack bang in
   89.61 + * StringBuilder is performed.
   89.62 + */
   89.63 +public class UncommonTrapStackBang extends Thread {
   89.64 +    class Foo { }
   89.65 +
   89.66 +    public static void main(String[] args) throws Exception {
   89.67 +        doWarmup();
   89.68 +
   89.69 +        // Fork off a new thread to increase odds of the stack being unmapped
   89.70 +        UncommonTrapStackBang htsb = new UncommonTrapStackBang();
   89.71 +        htsb.run();
   89.72 +        htsb.join();
   89.73 +    }
   89.74 +
   89.75 +    // Make sure:
   89.76 +    //
   89.77 +    // a) StringBuilder.<init>()V is compiled
   89.78 +    // b) doIt() is compiled with an uncommon trap in the unlikely path
   89.79 +    public static void doWarmup() {
   89.80 +        for (int i = 0; i < 100_000; i++) {
   89.81 +            new StringBuilder();
   89.82 +
   89.83 +            doIt(false);
   89.84 +        }
   89.85 +    }
   89.86 +
   89.87 +    public void run() {
   89.88 +        eatStack(200);
   89.89 +    }
   89.90 +
   89.91 +    // Consume some stack to get down to some unused/unmapped pages,
   89.92 +    // then call doIt and provoke the uncommon trap/deoptimization
   89.93 +    private void eatStack(int n) {
   89.94 +        if (n <= 0) {
   89.95 +            doIt(true);
   89.96 +            return;
   89.97 +        }
   89.98 +
   89.99 +        eatStack(n - 1);
  89.100 +    }
  89.101 +
  89.102 +    static public void doIt(boolean unlikely) {
  89.103 +        int i0;
  89.104 +        int i1;
  89.105 +        int i2;
  89.106 +        int i3;
  89.107 +        int i4;
  89.108 +        int i5;
  89.109 +        int i6;
  89.110 +        int i7;
  89.111 +        int i8;
  89.112 +        int i9;
  89.113 +        int i10;
  89.114 +        int i11;
  89.115 +        int i12;
  89.116 +        int i13;
  89.117 +        int i14;
  89.118 +        int i15;
  89.119 +        int i16;
  89.120 +        int i17;
  89.121 +        int i18;
  89.122 +        int i19;
  89.123 +        int i20;
  89.124 +        int i21;
  89.125 +        int i22;
  89.126 +        int i23;
  89.127 +        int i24;
  89.128 +        int i25;
  89.129 +        int i26;
  89.130 +        int i27;
  89.131 +        int i28;
  89.132 +        int i29;
  89.133 +        int i30;
  89.134 +        int i31;
  89.135 +        int i32;
  89.136 +        int i33;
  89.137 +        int i34;
  89.138 +        int i35;
  89.139 +        int i36;
  89.140 +        int i37;
  89.141 +        int i38;
  89.142 +        int i39;
  89.143 +        int i40;
  89.144 +        int i41;
  89.145 +        int i42;
  89.146 +        int i43;
  89.147 +        int i44;
  89.148 +        int i45;
  89.149 +        int i46;
  89.150 +        int i47;
  89.151 +        int i48;
  89.152 +        int i49;
  89.153 +        int i50;
  89.154 +        int i51;
  89.155 +        int i52;
  89.156 +        int i53;
  89.157 +        int i54;
  89.158 +        int i55;
  89.159 +        int i56;
  89.160 +        int i57;
  89.161 +        int i58;
  89.162 +        int i59;
  89.163 +        int i60;
  89.164 +        int i61;
  89.165 +        int i62;
  89.166 +        int i63;
  89.167 +        int i64;
  89.168 +        int i65;
  89.169 +        int i66;
  89.170 +        int i67;
  89.171 +        int i68;
  89.172 +        int i69;
  89.173 +        int i70;
  89.174 +        int i71;
  89.175 +        int i72;
  89.176 +        int i73;
  89.177 +        int i74;
  89.178 +        int i75;
  89.179 +        int i76;
  89.180 +        int i77;
  89.181 +        int i78;
  89.182 +        int i79;
  89.183 +        int i80;
  89.184 +        int i81;
  89.185 +        int i82;
  89.186 +        int i83;
  89.187 +        int i84;
  89.188 +        int i85;
  89.189 +        int i86;
  89.190 +        int i87;
  89.191 +        int i88;
  89.192 +        int i89;
  89.193 +        int i90;
  89.194 +        int i91;
  89.195 +        int i92;
  89.196 +        int i93;
  89.197 +        int i94;
  89.198 +        int i95;
  89.199 +        int i96;
  89.200 +        int i97;
  89.201 +        int i98;
  89.202 +        int i99;
  89.203 +        int i100;
  89.204 +        int i101;
  89.205 +        int i102;
  89.206 +        int i103;
  89.207 +        int i104;
  89.208 +        int i105;
  89.209 +        int i106;
  89.210 +        int i107;
  89.211 +        int i108;
  89.212 +        int i109;
  89.213 +        int i110;
  89.214 +        int i111;
  89.215 +        int i112;
  89.216 +        int i113;
  89.217 +        int i114;
  89.218 +        int i115;
  89.219 +        int i116;
  89.220 +        int i117;
  89.221 +        int i118;
  89.222 +        int i119;
  89.223 +        int i120;
  89.224 +        int i121;
  89.225 +        int i122;
  89.226 +        int i123;
  89.227 +        int i124;
  89.228 +        int i125;
  89.229 +        int i126;
  89.230 +        int i127;
  89.231 +        int i128;
  89.232 +        int i129;
  89.233 +        int i130;
  89.234 +        int i131;
  89.235 +        int i132;
  89.236 +        int i133;
  89.237 +        int i134;
  89.238 +        int i135;
  89.239 +        int i136;
  89.240 +        int i137;
  89.241 +        int i138;
  89.242 +        int i139;
  89.243 +        int i140;
  89.244 +        int i141;
  89.245 +        int i142;
  89.246 +        int i143;
  89.247 +        int i144;
  89.248 +        int i145;
  89.249 +        int i146;
  89.250 +        int i147;
  89.251 +        int i148;
  89.252 +        int i149;
  89.253 +        int i150;
  89.254 +        int i151;
  89.255 +        int i152;
  89.256 +        int i153;
  89.257 +        int i154;
  89.258 +        int i155;
  89.259 +        int i156;
  89.260 +        int i157;
  89.261 +        int i158;
  89.262 +        int i159;
  89.263 +        int i160;
  89.264 +        int i161;
  89.265 +        int i162;
  89.266 +        int i163;
  89.267 +        int i164;
  89.268 +        int i165;
  89.269 +        int i166;
  89.270 +        int i167;
  89.271 +        int i168;
  89.272 +        int i169;
  89.273 +        int i170;
  89.274 +        int i171;
  89.275 +        int i172;
  89.276 +        int i173;
  89.277 +        int i174;
  89.278 +        int i175;
  89.279 +        int i176;
  89.280 +        int i177;
  89.281 +        int i178;
  89.282 +        int i179;
  89.283 +        int i180;
  89.284 +        int i181;
  89.285 +        int i182;
  89.286 +        int i183;
  89.287 +        int i184;
  89.288 +        int i185;
  89.289 +        int i186;
  89.290 +        int i187;
  89.291 +        int i188;
  89.292 +        int i189;
  89.293 +        int i190;
  89.294 +        int i191;
  89.295 +        int i192;
  89.296 +        int i193;
  89.297 +        int i194;
  89.298 +        int i195;
  89.299 +        int i196;
  89.300 +        int i197;
  89.301 +        int i198;
  89.302 +        int i199;
  89.303 +        int i200;
  89.304 +        int i201;
  89.305 +        int i202;
  89.306 +        int i203;
  89.307 +        int i204;
  89.308 +        int i205;
  89.309 +        int i206;
  89.310 +        int i207;
  89.311 +        int i208;
  89.312 +        int i209;
  89.313 +        int i210;
  89.314 +        int i211;
  89.315 +        int i212;
  89.316 +        int i213;
  89.317 +        int i214;
  89.318 +        int i215;
  89.319 +        int i216;
  89.320 +        int i217;
  89.321 +        int i218;
  89.322 +        int i219;
  89.323 +        int i220;
  89.324 +        int i221;
  89.325 +        int i222;
  89.326 +        int i223;
  89.327 +        int i224;
  89.328 +        int i225;
  89.329 +        int i226;
  89.330 +        int i227;
  89.331 +        int i228;
  89.332 +        int i229;
  89.333 +        int i230;
  89.334 +        int i231;
  89.335 +        int i232;
  89.336 +        int i233;
  89.337 +        int i234;
  89.338 +        int i235;
  89.339 +        int i236;
  89.340 +        int i237;
  89.341 +        int i238;
  89.342 +        int i239;
  89.343 +        int i240;
  89.344 +        int i241;
  89.345 +        int i242;
  89.346 +        int i243;
  89.347 +        int i244;
  89.348 +        int i245;
  89.349 +        int i246;
  89.350 +        int i247;
  89.351 +        int i248;
  89.352 +        int i249;
  89.353 +        int i250;
  89.354 +        int i251;
  89.355 +        int i252;
  89.356 +        int i253;
  89.357 +        int i254;
  89.358 +        int i255;
  89.359 +        int i256;
  89.360 +        int i257;
  89.361 +        int i258;
  89.362 +        int i259;
  89.363 +        int i260;
  89.364 +        int i261;
  89.365 +        int i262;
  89.366 +        int i263;
  89.367 +        int i264;
  89.368 +        int i265;
  89.369 +        int i266;
  89.370 +        int i267;
  89.371 +        int i268;
  89.372 +        int i269;
  89.373 +        int i270;
  89.374 +        int i271;
  89.375 +        int i272;
  89.376 +        int i273;
  89.377 +        int i274;
  89.378 +        int i275;
  89.379 +        int i276;
  89.380 +        int i277;
  89.381 +        int i278;
  89.382 +        int i279;
  89.383 +        int i280;
  89.384 +        int i281;
  89.385 +        int i282;
  89.386 +        int i283;
  89.387 +        int i284;
  89.388 +        int i285;
  89.389 +        int i286;
  89.390 +        int i287;
  89.391 +        int i288;
  89.392 +        int i289;
  89.393 +        int i290;
  89.394 +        int i291;
  89.395 +        int i292;
  89.396 +        int i293;
  89.397 +        int i294;
  89.398 +        int i295;
  89.399 +        int i296;
  89.400 +        int i297;
  89.401 +        int i298;
  89.402 +        int i299;
  89.403 +        int i300;
  89.404 +        int i301;
  89.405 +        int i302;
  89.406 +        int i303;
  89.407 +        int i304;
  89.408 +        int i305;
  89.409 +        int i306;
  89.410 +        int i307;
  89.411 +        int i308;
  89.412 +        int i309;
  89.413 +        int i310;
  89.414 +        int i311;
  89.415 +        int i312;
  89.416 +        int i313;
  89.417 +        int i314;
  89.418 +        int i315;
  89.419 +        int i316;
  89.420 +        int i317;
  89.421 +        int i318;
  89.422 +        int i319;
  89.423 +        int i320;
  89.424 +        int i321;
  89.425 +        int i322;
  89.426 +        int i323;
  89.427 +        int i324;
  89.428 +        int i325;
  89.429 +        int i326;
  89.430 +        int i327;
  89.431 +        int i328;
  89.432 +        int i329;
  89.433 +        int i330;
  89.434 +        int i331;
  89.435 +        int i332;
  89.436 +        int i333;
  89.437 +        int i334;
  89.438 +        int i335;
  89.439 +        int i336;
  89.440 +        int i337;
  89.441 +        int i338;
  89.442 +        int i339;
  89.443 +        int i340;
  89.444 +        int i341;
  89.445 +        int i342;
  89.446 +        int i343;
  89.447 +        int i344;
  89.448 +        int i345;
  89.449 +        int i346;
  89.450 +        int i347;
  89.451 +        int i348;
  89.452 +        int i349;
  89.453 +        int i350;
  89.454 +        int i351;
  89.455 +        int i352;
  89.456 +        int i353;
  89.457 +        int i354;
  89.458 +        int i355;
  89.459 +        int i356;
  89.460 +        int i357;
  89.461 +        int i358;
  89.462 +        int i359;
  89.463 +        int i360;
  89.464 +        int i361;
  89.465 +        int i362;
  89.466 +        int i363;
  89.467 +        int i364;
  89.468 +        int i365;
  89.469 +        int i366;
  89.470 +        int i367;
  89.471 +        int i368;
  89.472 +        int i369;
  89.473 +        int i370;
  89.474 +        int i371;
  89.475 +        int i372;
  89.476 +        int i373;
  89.477 +        int i374;
  89.478 +        int i375;
  89.479 +        int i376;
  89.480 +        int i377;
  89.481 +        int i378;
  89.482 +        int i379;
  89.483 +        int i380;
  89.484 +        int i381;
  89.485 +        int i382;
  89.486 +        int i383;
  89.487 +        int i384;
  89.488 +        int i385;
  89.489 +        int i386;
  89.490 +        int i387;
  89.491 +        int i388;
  89.492 +        int i389;
  89.493 +        int i390;
  89.494 +        int i391;
  89.495 +        int i392;
  89.496 +        int i393;
  89.497 +        int i394;
  89.498 +        int i395;
  89.499 +        int i396;
  89.500 +        int i397;
  89.501 +        int i398;
  89.502 +        int i399;
  89.503 +        int i400;
  89.504 +        int i401;
  89.505 +        int i402;
  89.506 +        int i403;
  89.507 +        int i404;
  89.508 +        int i405;
  89.509 +        int i406;
  89.510 +        int i407;
  89.511 +        int i408;
  89.512 +        int i409;
  89.513 +        int i410;
  89.514 +        int i411;
  89.515 +        int i412;
  89.516 +        int i413;
  89.517 +        int i414;
  89.518 +        int i415;
  89.519 +        int i416;
  89.520 +        int i417;
  89.521 +        int i418;
  89.522 +        int i419;
  89.523 +        int i420;
  89.524 +        int i421;
  89.525 +        int i422;
  89.526 +        int i423;
  89.527 +        int i424;
  89.528 +        int i425;
  89.529 +        int i426;
  89.530 +        int i427;
  89.531 +        int i428;
  89.532 +        int i429;
  89.533 +        int i430;
  89.534 +        int i431;
  89.535 +        int i432;
  89.536 +        int i433;
  89.537 +        int i434;
  89.538 +        int i435;
  89.539 +        int i436;
  89.540 +        int i437;
  89.541 +        int i438;
  89.542 +        int i439;
  89.543 +        int i440;
  89.544 +        int i441;
  89.545 +        int i442;
  89.546 +        int i443;
  89.547 +        int i444;
  89.548 +        int i445;
  89.549 +        int i446;
  89.550 +        int i447;
  89.551 +        int i448;
  89.552 +        int i449;
  89.553 +        int i450;
  89.554 +        int i451;
  89.555 +        int i452;
  89.556 +        int i453;
  89.557 +        int i454;
  89.558 +        int i455;
  89.559 +        int i456;
  89.560 +        int i457;
  89.561 +        int i458;
  89.562 +        int i459;
  89.563 +        int i460;
  89.564 +        int i461;
  89.565 +        int i462;
  89.566 +        int i463;
  89.567 +        int i464;
  89.568 +        int i465;
  89.569 +        int i466;
  89.570 +        int i467;
  89.571 +        int i468;
  89.572 +        int i469;
  89.573 +        int i470;
  89.574 +        int i471;
  89.575 +        int i472;
  89.576 +        int i473;
  89.577 +        int i474;
  89.578 +        int i475;
  89.579 +        int i476;
  89.580 +        int i477;
  89.581 +        int i478;
  89.582 +        int i479;
  89.583 +        int i480;
  89.584 +        int i481;
  89.585 +        int i482;
  89.586 +        int i483;
  89.587 +        int i484;
  89.588 +        int i485;
  89.589 +        int i486;
  89.590 +        int i487;
  89.591 +        int i488;
  89.592 +        int i489;
  89.593 +        int i490;
  89.594 +        int i491;
  89.595 +        int i492;
  89.596 +        int i493;
  89.597 +        int i494;
  89.598 +        int i495;
  89.599 +        int i496;
  89.600 +        int i497;
  89.601 +        int i498;
  89.602 +        int i499;
  89.603 +        int i500;
  89.604 +        int i501;
  89.605 +        int i502;
  89.606 +        int i503;
  89.607 +        int i504;
  89.608 +        int i505;
  89.609 +        int i506;
  89.610 +        int i507;
  89.611 +        int i508;
  89.612 +        int i509;
  89.613 +        int i510;
  89.614 +        int i511;
  89.615 +        int i512;
  89.616 +        int i513;
  89.617 +        int i514;
  89.618 +        int i515;
  89.619 +        int i516;
  89.620 +        int i517;
  89.621 +        int i518;
  89.622 +        int i519;
  89.623 +        int i520;
  89.624 +        int i521;
  89.625 +        int i522;
  89.626 +        int i523;
  89.627 +        int i524;
  89.628 +        int i525;
  89.629 +        int i526;
  89.630 +        int i527;
  89.631 +        int i528;
  89.632 +        int i529;
  89.633 +        int i530;
  89.634 +        int i531;
  89.635 +        int i532;
  89.636 +        int i533;
  89.637 +        int i534;
  89.638 +        int i535;
  89.639 +        int i536;
  89.640 +        int i537;
  89.641 +        int i538;
  89.642 +        int i539;
  89.643 +        int i540;
  89.644 +        int i541;
  89.645 +        int i542;
  89.646 +        int i543;
  89.647 +        int i544;
  89.648 +        int i545;
  89.649 +        int i546;
  89.650 +        int i547;
  89.651 +        int i548;
  89.652 +        int i549;
  89.653 +        int i550;
  89.654 +        int i551;
  89.655 +        int i552;
  89.656 +        int i553;
  89.657 +        int i554;
  89.658 +        int i555;
  89.659 +        int i556;
  89.660 +        int i557;
  89.661 +        int i558;
  89.662 +        int i559;
  89.663 +        int i560;
  89.664 +        int i561;
  89.665 +        int i562;
  89.666 +        int i563;
  89.667 +        int i564;
  89.668 +        int i565;
  89.669 +        int i566;
  89.670 +        int i567;
  89.671 +        int i568;
  89.672 +        int i569;
  89.673 +        int i570;
  89.674 +        int i571;
  89.675 +        int i572;
  89.676 +        int i573;
  89.677 +        int i574;
  89.678 +        int i575;
  89.679 +        int i576;
  89.680 +        int i577;
  89.681 +        int i578;
  89.682 +        int i579;
  89.683 +        int i580;
  89.684 +        int i581;
  89.685 +        int i582;
  89.686 +        int i583;
  89.687 +        int i584;
  89.688 +        int i585;
  89.689 +        int i586;
  89.690 +        int i587;
  89.691 +        int i588;
  89.692 +        int i589;
  89.693 +        int i590;
  89.694 +        int i591;
  89.695 +        int i592;
  89.696 +        int i593;
  89.697 +        int i594;
  89.698 +        int i595;
  89.699 +        int i596;
  89.700 +        int i597;
  89.701 +        int i598;
  89.702 +        int i599;
  89.703 +        int i600;
  89.704 +        int i601;
  89.705 +        int i602;
  89.706 +        int i603;
  89.707 +        int i604;
  89.708 +        int i605;
  89.709 +        int i606;
  89.710 +        int i607;
  89.711 +        int i608;
  89.712 +        int i609;
  89.713 +        int i610;
  89.714 +        int i611;
  89.715 +        int i612;
  89.716 +        int i613;
  89.717 +        int i614;
  89.718 +        int i615;
  89.719 +        int i616;
  89.720 +        int i617;
  89.721 +        int i618;
  89.722 +        int i619;
  89.723 +        int i620;
  89.724 +        int i621;
  89.725 +        int i622;
  89.726 +        int i623;
  89.727 +        int i624;
  89.728 +        int i625;
  89.729 +        int i626;
  89.730 +        int i627;
  89.731 +        int i628;
  89.732 +        int i629;
  89.733 +        int i630;
  89.734 +        int i631;
  89.735 +        int i632;
  89.736 +        int i633;
  89.737 +        int i634;
  89.738 +        int i635;
  89.739 +        int i636;
  89.740 +        int i637;
  89.741 +        int i638;
  89.742 +        int i639;
  89.743 +        int i640;
  89.744 +        int i641;
  89.745 +        int i642;
  89.746 +        int i643;
  89.747 +        int i644;
  89.748 +        int i645;
  89.749 +        int i646;
  89.750 +        int i647;
  89.751 +        int i648;
  89.752 +        int i649;
  89.753 +        int i650;
  89.754 +        int i651;
  89.755 +        int i652;
  89.756 +        int i653;
  89.757 +        int i654;
  89.758 +        int i655;
  89.759 +        int i656;
  89.760 +        int i657;
  89.761 +        int i658;
  89.762 +        int i659;
  89.763 +        int i660;
  89.764 +        int i661;
  89.765 +        int i662;
  89.766 +        int i663;
  89.767 +        int i664;
  89.768 +        int i665;
  89.769 +        int i666;
  89.770 +        int i667;
  89.771 +        int i668;
  89.772 +        int i669;
  89.773 +        int i670;
  89.774 +        int i671;
  89.775 +        int i672;
  89.776 +        int i673;
  89.777 +        int i674;
  89.778 +        int i675;
  89.779 +        int i676;
  89.780 +        int i677;
  89.781 +        int i678;
  89.782 +        int i679;
  89.783 +        int i680;
  89.784 +        int i681;
  89.785 +        int i682;
  89.786 +        int i683;
  89.787 +        int i684;
  89.788 +        int i685;
  89.789 +        int i686;
  89.790 +        int i687;
  89.791 +        int i688;
  89.792 +        int i689;
  89.793 +        int i690;
  89.794 +        int i691;
  89.795 +        int i692;
  89.796 +        int i693;
  89.797 +        int i694;
  89.798 +        int i695;
  89.799 +        int i696;
  89.800 +        int i697;
  89.801 +        int i698;
  89.802 +        int i699;
  89.803 +        int i700;
  89.804 +        int i701;
  89.805 +        int i702;
  89.806 +        int i703;
  89.807 +        int i704;
  89.808 +        int i705;
  89.809 +        int i706;
  89.810 +        int i707;
  89.811 +        int i708;
  89.812 +        int i709;
  89.813 +        int i710;
  89.814 +        int i711;
  89.815 +        int i712;
  89.816 +        int i713;
  89.817 +        int i714;
  89.818 +        int i715;
  89.819 +        int i716;
  89.820 +        int i717;
  89.821 +        int i718;
  89.822 +        int i719;
  89.823 +        int i720;
  89.824 +        int i721;
  89.825 +        int i722;
  89.826 +        int i723;
  89.827 +        int i724;
  89.828 +        int i725;
  89.829 +        int i726;
  89.830 +        int i727;
  89.831 +        int i728;
  89.832 +        int i729;
  89.833 +        int i730;
  89.834 +        int i731;
  89.835 +        int i732;
  89.836 +        int i733;
  89.837 +        int i734;
  89.838 +        int i735;
  89.839 +        int i736;
  89.840 +        int i737;
  89.841 +        int i738;
  89.842 +        int i739;
  89.843 +        int i740;
  89.844 +        int i741;
  89.845 +        int i742;
  89.846 +        int i743;
  89.847 +        int i744;
  89.848 +        int i745;
  89.849 +        int i746;
  89.850 +        int i747;
  89.851 +        int i748;
  89.852 +        int i749;
  89.853 +        int i750;
  89.854 +        int i751;
  89.855 +        int i752;
  89.856 +        int i753;
  89.857 +        int i754;
  89.858 +        int i755;
  89.859 +        int i756;
  89.860 +        int i757;
  89.861 +        int i758;
  89.862 +        int i759;
  89.863 +        int i760;
  89.864 +        int i761;
  89.865 +        int i762;
  89.866 +        int i763;
  89.867 +        int i764;
  89.868 +        int i765;
  89.869 +        int i766;
  89.870 +        int i767;
  89.871 +        int i768;
  89.872 +        int i769;
  89.873 +        int i770;
  89.874 +        int i771;
  89.875 +        int i772;
  89.876 +        int i773;
  89.877 +        int i774;
  89.878 +        int i775;
  89.879 +        int i776;
  89.880 +        int i777;
  89.881 +        int i778;
  89.882 +        int i779;
  89.883 +        int i780;
  89.884 +        int i781;
  89.885 +        int i782;
  89.886 +        int i783;
  89.887 +        int i784;
  89.888 +        int i785;
  89.889 +        int i786;
  89.890 +        int i787;
  89.891 +        int i788;
  89.892 +        int i789;
  89.893 +        int i790;
  89.894 +        int i791;
  89.895 +        int i792;
  89.896 +        int i793;
  89.897 +        int i794;
  89.898 +        int i795;
  89.899 +        int i796;
  89.900 +        int i797;
  89.901 +        int i798;
  89.902 +        int i799;
  89.903 +        int i800;
  89.904 +        int i801;
  89.905 +        int i802;
  89.906 +        int i803;
  89.907 +        int i804;
  89.908 +        int i805;
  89.909 +        int i806;
  89.910 +        int i807;
  89.911 +        int i808;
  89.912 +        int i809;
  89.913 +        int i810;
  89.914 +        int i811;
  89.915 +        int i812;
  89.916 +        int i813;
  89.917 +        int i814;
  89.918 +        int i815;
  89.919 +        int i816;
  89.920 +        int i817;
  89.921 +        int i818;
  89.922 +        int i819;
  89.923 +        int i820;
  89.924 +        int i821;
  89.925 +        int i822;
  89.926 +        int i823;
  89.927 +        int i824;
  89.928 +        int i825;
  89.929 +        int i826;
  89.930 +        int i827;
  89.931 +        int i828;
  89.932 +        int i829;
  89.933 +        int i830;
  89.934 +        int i831;
  89.935 +        int i832;
  89.936 +        int i833;
  89.937 +        int i834;
  89.938 +        int i835;
  89.939 +        int i836;
  89.940 +        int i837;
  89.941 +        int i838;
  89.942 +        int i839;
  89.943 +        int i840;
  89.944 +        int i841;
  89.945 +        int i842;
  89.946 +        int i843;
  89.947 +        int i844;
  89.948 +        int i845;
  89.949 +        int i846;
  89.950 +        int i847;
  89.951 +        int i848;
  89.952 +        int i849;
  89.953 +        int i850;
  89.954 +        int i851;
  89.955 +        int i852;
  89.956 +        int i853;
  89.957 +        int i854;
  89.958 +        int i855;
  89.959 +        int i856;
  89.960 +        int i857;
  89.961 +        int i858;
  89.962 +        int i859;
  89.963 +        int i860;
  89.964 +        int i861;
  89.965 +        int i862;
  89.966 +        int i863;
  89.967 +        int i864;
  89.968 +        int i865;
  89.969 +        int i866;
  89.970 +        int i867;
  89.971 +        int i868;
  89.972 +        int i869;
  89.973 +        int i870;
  89.974 +        int i871;
  89.975 +        int i872;
  89.976 +        int i873;
  89.977 +        int i874;
  89.978 +        int i875;
  89.979 +        int i876;
  89.980 +        int i877;
  89.981 +        int i878;
  89.982 +        int i879;
  89.983 +        int i880;
  89.984 +        int i881;
  89.985 +        int i882;
  89.986 +        int i883;
  89.987 +        int i884;
  89.988 +        int i885;
  89.989 +        int i886;
  89.990 +        int i887;
  89.991 +        int i888;
  89.992 +        int i889;
  89.993 +        int i890;
  89.994 +        int i891;
  89.995 +        int i892;
  89.996 +        int i893;
  89.997 +        int i894;
  89.998 +        int i895;
  89.999 +        int i896;
 89.1000 +        int i897;
 89.1001 +        int i898;
 89.1002 +        int i899;
 89.1003 +        int i900;
 89.1004 +        int i901;
 89.1005 +        int i902;
 89.1006 +        int i903;
 89.1007 +        int i904;
 89.1008 +        int i905;
 89.1009 +        int i906;
 89.1010 +        int i907;
 89.1011 +        int i908;
 89.1012 +        int i909;
 89.1013 +        int i910;
 89.1014 +        int i911;
 89.1015 +        int i912;
 89.1016 +        int i913;
 89.1017 +        int i914;
 89.1018 +        int i915;
 89.1019 +        int i916;
 89.1020 +        int i917;
 89.1021 +        int i918;
 89.1022 +        int i919;
 89.1023 +        int i920;
 89.1024 +        int i921;
 89.1025 +        int i922;
 89.1026 +        int i923;
 89.1027 +        int i924;
 89.1028 +        int i925;
 89.1029 +        int i926;
 89.1030 +        int i927;
 89.1031 +        int i928;
 89.1032 +        int i929;
 89.1033 +        int i930;
 89.1034 +        int i931;
 89.1035 +        int i932;
 89.1036 +        int i933;
 89.1037 +        int i934;
 89.1038 +        int i935;
 89.1039 +        int i936;
 89.1040 +        int i937;
 89.1041 +        int i938;
 89.1042 +        int i939;
 89.1043 +        int i940;
 89.1044 +        int i941;
 89.1045 +        int i942;
 89.1046 +        int i943;
 89.1047 +        int i944;
 89.1048 +        int i945;
 89.1049 +        int i946;
 89.1050 +        int i947;
 89.1051 +        int i948;
 89.1052 +        int i949;
 89.1053 +        int i950;
 89.1054 +        int i951;
 89.1055 +        int i952;
 89.1056 +        int i953;
 89.1057 +        int i954;
 89.1058 +        int i955;
 89.1059 +        int i956;
 89.1060 +        int i957;
 89.1061 +        int i958;
 89.1062 +        int i959;
 89.1063 +        int i960;
 89.1064 +        int i961;
 89.1065 +        int i962;
 89.1066 +        int i963;
 89.1067 +        int i964;
 89.1068 +        int i965;
 89.1069 +        int i966;
 89.1070 +        int i967;
 89.1071 +        int i968;
 89.1072 +        int i969;
 89.1073 +        int i970;
 89.1074 +        int i971;
 89.1075 +        int i972;
 89.1076 +        int i973;
 89.1077 +        int i974;
 89.1078 +        int i975;
 89.1079 +        int i976;
 89.1080 +        int i977;
 89.1081 +        int i978;
 89.1082 +        int i979;
 89.1083 +        int i980;
 89.1084 +        int i981;
 89.1085 +        int i982;
 89.1086 +        int i983;
 89.1087 +        int i984;
 89.1088 +        int i985;
 89.1089 +        int i986;
 89.1090 +        int i987;
 89.1091 +        int i988;
 89.1092 +        int i989;
 89.1093 +        int i990;
 89.1094 +        int i991;
 89.1095 +        int i992;
 89.1096 +        int i993;
 89.1097 +        int i994;
 89.1098 +        int i995;
 89.1099 +        int i996;
 89.1100 +        int i997;
 89.1101 +        int i998;
 89.1102 +        int i999;
 89.1103 +        int i1000;
 89.1104 +        int i1001;
 89.1105 +        int i1002;
 89.1106 +        int i1003;
 89.1107 +        int i1004;
 89.1108 +        int i1005;
 89.1109 +        int i1006;
 89.1110 +        int i1007;
 89.1111 +        int i1008;
 89.1112 +        int i1009;
 89.1113 +        int i1010;
 89.1114 +        int i1011;
 89.1115 +        int i1012;
 89.1116 +        int i1013;
 89.1117 +        int i1014;
 89.1118 +        int i1015;
 89.1119 +        int i1016;
 89.1120 +        int i1017;
 89.1121 +        int i1018;
 89.1122 +        int i1019;
 89.1123 +        int i1020;
 89.1124 +        int i1021;
 89.1125 +        int i1022;
 89.1126 +        int i1023;
 89.1127 +        int i1024;
 89.1128 +        int i1025;
 89.1129 +        int i1026;
 89.1130 +        int i1027;
 89.1131 +        int i1028;
 89.1132 +        int i1029;
 89.1133 +        int i1030;
 89.1134 +        int i1031;
 89.1135 +        int i1032;
 89.1136 +        int i1033;
 89.1137 +        int i1034;
 89.1138 +        int i1035;
 89.1139 +        int i1036;
 89.1140 +        int i1037;
 89.1141 +        int i1038;
 89.1142 +        int i1039;
 89.1143 +        int i1040;
 89.1144 +        int i1041;
 89.1145 +        int i1042;
 89.1146 +        int i1043;
 89.1147 +        int i1044;
 89.1148 +        int i1045;
 89.1149 +        int i1046;
 89.1150 +        int i1047;
 89.1151 +        int i1048;
 89.1152 +        int i1049;
 89.1153 +        int i1050;
 89.1154 +        int i1051;
 89.1155 +        int i1052;
 89.1156 +        int i1053;
 89.1157 +        int i1054;
 89.1158 +        int i1055;
 89.1159 +        int i1056;
 89.1160 +        int i1057;
 89.1161 +        int i1058;
 89.1162 +        int i1059;
 89.1163 +        int i1060;
 89.1164 +        int i1061;
 89.1165 +        int i1062;
 89.1166 +        int i1063;
 89.1167 +        int i1064;
 89.1168 +        int i1065;
 89.1169 +        int i1066;
 89.1170 +        int i1067;
 89.1171 +        int i1068;
 89.1172 +        int i1069;
 89.1173 +        int i1070;
 89.1174 +        int i1071;
 89.1175 +        int i1072;
 89.1176 +        int i1073;
 89.1177 +        int i1074;
 89.1178 +        int i1075;
 89.1179 +        int i1076;
 89.1180 +        int i1077;
 89.1181 +        int i1078;
 89.1182 +        int i1079;
 89.1183 +        int i1080;
 89.1184 +        int i1081;
 89.1185 +        int i1082;
 89.1186 +        int i1083;
 89.1187 +        int i1084;
 89.1188 +        int i1085;
 89.1189 +        int i1086;
 89.1190 +        int i1087;
 89.1191 +        int i1088;
 89.1192 +        int i1089;
 89.1193 +        int i1090;
 89.1194 +        int i1091;
 89.1195 +        int i1092;
 89.1196 +        int i1093;
 89.1197 +        int i1094;
 89.1198 +        int i1095;
 89.1199 +        int i1096;
 89.1200 +        int i1097;
 89.1201 +        int i1098;
 89.1202 +        int i1099;
 89.1203 +        int i1100;
 89.1204 +        int i1101;
 89.1205 +        int i1102;
 89.1206 +        int i1103;
 89.1207 +        int i1104;
 89.1208 +        int i1105;
 89.1209 +        int i1106;
 89.1210 +        int i1107;
 89.1211 +        int i1108;
 89.1212 +        int i1109;
 89.1213 +        int i1110;
 89.1214 +        int i1111;
 89.1215 +        int i1112;
 89.1216 +        int i1113;
 89.1217 +        int i1114;
 89.1218 +        int i1115;
 89.1219 +        int i1116;
 89.1220 +        int i1117;
 89.1221 +        int i1118;
 89.1222 +        int i1119;
 89.1223 +        int i1120;
 89.1224 +        int i1121;
 89.1225 +        int i1122;
 89.1226 +        int i1123;
 89.1227 +        int i1124;
 89.1228 +        int i1125;
 89.1229 +        int i1126;
 89.1230 +        int i1127;
 89.1231 +        int i1128;
 89.1232 +        int i1129;
 89.1233 +        int i1130;
 89.1234 +        int i1131;
 89.1235 +        int i1132;
 89.1236 +        int i1133;
 89.1237 +        int i1134;
 89.1238 +        int i1135;
 89.1239 +        int i1136;
 89.1240 +        int i1137;
 89.1241 +        int i1138;
 89.1242 +        int i1139;
 89.1243 +        int i1140;
 89.1244 +        int i1141;
 89.1245 +        int i1142;
 89.1246 +        int i1143;
 89.1247 +        int i1144;
 89.1248 +        int i1145;
 89.1249 +        int i1146;
 89.1250 +        int i1147;
 89.1251 +        int i1148;
 89.1252 +        int i1149;
 89.1253 +        int i1150;
 89.1254 +        int i1151;
 89.1255 +        int i1152;
 89.1256 +        int i1153;
 89.1257 +        int i1154;
 89.1258 +        int i1155;
 89.1259 +        int i1156;
 89.1260 +        int i1157;
 89.1261 +        int i1158;
 89.1262 +        int i1159;
 89.1263 +        int i1160;
 89.1264 +        int i1161;
 89.1265 +        int i1162;
 89.1266 +        int i1163;
 89.1267 +        int i1164;
 89.1268 +        int i1165;
 89.1269 +        int i1166;
 89.1270 +        int i1167;
 89.1271 +        int i1168;
 89.1272 +        int i1169;
 89.1273 +        int i1170;
 89.1274 +        int i1171;
 89.1275 +        int i1172;
 89.1276 +        int i1173;
 89.1277 +        int i1174;
 89.1278 +        int i1175;
 89.1279 +        int i1176;
 89.1280 +        int i1177;
 89.1281 +        int i1178;
 89.1282 +        int i1179;
 89.1283 +        int i1180;
 89.1284 +        int i1181;
 89.1285 +        int i1182;
 89.1286 +        int i1183;
 89.1287 +        int i1184;
 89.1288 +        int i1185;
 89.1289 +        int i1186;
 89.1290 +        int i1187;
 89.1291 +        int i1188;
 89.1292 +        int i1189;
 89.1293 +        int i1190;
 89.1294 +        int i1191;
 89.1295 +        int i1192;
 89.1296 +        int i1193;
 89.1297 +        int i1194;
 89.1298 +        int i1195;
 89.1299 +        int i1196;
 89.1300 +        int i1197;
 89.1301 +        int i1198;
 89.1302 +        int i1199;
 89.1303 +        int i1200;
 89.1304 +        int i1201;
 89.1305 +        int i1202;
 89.1306 +        int i1203;
 89.1307 +        int i1204;
 89.1308 +        int i1205;
 89.1309 +        int i1206;
 89.1310 +        int i1207;
 89.1311 +        int i1208;
 89.1312 +        int i1209;
 89.1313 +        int i1210;
 89.1314 +        int i1211;
 89.1315 +        int i1212;
 89.1316 +        int i1213;
 89.1317 +        int i1214;
 89.1318 +        int i1215;
 89.1319 +        int i1216;
 89.1320 +        int i1217;
 89.1321 +        int i1218;
 89.1322 +        int i1219;
 89.1323 +        int i1220;
 89.1324 +        int i1221;
 89.1325 +        int i1222;
 89.1326 +        int i1223;
 89.1327 +        int i1224;
 89.1328 +        int i1225;
 89.1329 +        int i1226;
 89.1330 +        int i1227;
 89.1331 +        int i1228;
 89.1332 +        int i1229;
 89.1333 +        int i1230;
 89.1334 +        int i1231;
 89.1335 +        int i1232;
 89.1336 +        int i1233;
 89.1337 +        int i1234;
 89.1338 +        int i1235;
 89.1339 +        int i1236;
 89.1340 +        int i1237;
 89.1341 +        int i1238;
 89.1342 +        int i1239;
 89.1343 +        int i1240;
 89.1344 +        int i1241;
 89.1345 +        int i1242;
 89.1346 +        int i1243;
 89.1347 +        int i1244;
 89.1348 +        int i1245;
 89.1349 +        int i1246;
 89.1350 +        int i1247;
 89.1351 +        int i1248;
 89.1352 +        int i1249;
 89.1353 +        int i1250;
 89.1354 +        int i1251;
 89.1355 +        int i1252;
 89.1356 +        int i1253;
 89.1357 +        int i1254;
 89.1358 +        int i1255;
 89.1359 +        int i1256;
 89.1360 +        int i1257;
 89.1361 +        int i1258;
 89.1362 +        int i1259;
 89.1363 +        int i1260;
 89.1364 +        int i1261;
 89.1365 +        int i1262;
 89.1366 +        int i1263;
 89.1367 +        int i1264;
 89.1368 +        int i1265;
 89.1369 +        int i1266;
 89.1370 +        int i1267;
 89.1371 +        int i1268;
 89.1372 +        int i1269;
 89.1373 +        int i1270;
 89.1374 +        int i1271;
 89.1375 +        int i1272;
 89.1376 +        int i1273;
 89.1377 +        int i1274;
 89.1378 +        int i1275;
 89.1379 +        int i1276;
 89.1380 +        int i1277;
 89.1381 +        int i1278;
 89.1382 +        int i1279;
 89.1383 +        int i1280;
 89.1384 +        int i1281;
 89.1385 +        int i1282;
 89.1386 +        int i1283;
 89.1387 +        int i1284;
 89.1388 +        int i1285;
 89.1389 +        int i1286;
 89.1390 +        int i1287;
 89.1391 +        int i1288;
 89.1392 +        int i1289;
 89.1393 +        int i1290;
 89.1394 +        int i1291;
 89.1395 +        int i1292;
 89.1396 +        int i1293;
 89.1397 +        int i1294;
 89.1398 +        int i1295;
 89.1399 +        int i1296;
 89.1400 +        int i1297;
 89.1401 +        int i1298;
 89.1402 +        int i1299;
 89.1403 +        int i1300;
 89.1404 +        int i1301;
 89.1405 +        int i1302;
 89.1406 +        int i1303;
 89.1407 +        int i1304;
 89.1408 +        int i1305;
 89.1409 +        int i1306;
 89.1410 +        int i1307;
 89.1411 +        int i1308;
 89.1412 +        int i1309;
 89.1413 +        int i1310;
 89.1414 +        int i1311;
 89.1415 +        int i1312;
 89.1416 +        int i1313;
 89.1417 +        int i1314;
 89.1418 +        int i1315;
 89.1419 +        int i1316;
 89.1420 +        int i1317;
 89.1421 +        int i1318;
 89.1422 +        int i1319;
 89.1423 +        int i1320;
 89.1424 +        int i1321;
 89.1425 +        int i1322;
 89.1426 +        int i1323;
 89.1427 +        int i1324;
 89.1428 +        int i1325;
 89.1429 +        int i1326;
 89.1430 +        int i1327;
 89.1431 +        int i1328;
 89.1432 +        int i1329;
 89.1433 +        int i1330;
 89.1434 +        int i1331;
 89.1435 +        int i1332;
 89.1436 +        int i1333;
 89.1437 +        int i1334;
 89.1438 +        int i1335;
 89.1439 +        int i1336;
 89.1440 +        int i1337;
 89.1441 +        int i1338;
 89.1442 +        int i1339;
 89.1443 +        int i1340;
 89.1444 +        int i1341;
 89.1445 +        int i1342;
 89.1446 +        int i1343;
 89.1447 +        int i1344;
 89.1448 +        int i1345;
 89.1449 +        int i1346;
 89.1450 +        int i1347;
 89.1451 +        int i1348;
 89.1452 +        int i1349;
 89.1453 +        int i1350;
 89.1454 +        int i1351;
 89.1455 +        int i1352;
 89.1456 +        int i1353;
 89.1457 +        int i1354;
 89.1458 +        int i1355;
 89.1459 +        int i1356;
 89.1460 +        int i1357;
 89.1461 +        int i1358;
 89.1462 +        int i1359;
 89.1463 +        int i1360;
 89.1464 +        int i1361;
 89.1465 +        int i1362;
 89.1466 +        int i1363;
 89.1467 +        int i1364;
 89.1468 +        int i1365;
 89.1469 +        int i1366;
 89.1470 +        int i1367;
 89.1471 +        int i1368;
 89.1472 +        int i1369;
 89.1473 +        int i1370;
 89.1474 +        int i1371;
 89.1475 +        int i1372;
 89.1476 +        int i1373;
 89.1477 +        int i1374;
 89.1478 +        int i1375;
 89.1479 +        int i1376;
 89.1480 +        int i1377;
 89.1481 +        int i1378;
 89.1482 +        int i1379;
 89.1483 +        int i1380;
 89.1484 +        int i1381;
 89.1485 +        int i1382;
 89.1486 +        int i1383;
 89.1487 +        int i1384;
 89.1488 +        int i1385;
 89.1489 +        int i1386;
 89.1490 +        int i1387;
 89.1491 +        int i1388;
 89.1492 +        int i1389;
 89.1493 +        int i1390;
 89.1494 +        int i1391;
 89.1495 +        int i1392;
 89.1496 +        int i1393;
 89.1497 +        int i1394;
 89.1498 +        int i1395;
 89.1499 +        int i1396;
 89.1500 +        int i1397;
 89.1501 +        int i1398;
 89.1502 +        int i1399;
 89.1503 +        int i1400;
 89.1504 +        int i1401;
 89.1505 +        int i1402;
 89.1506 +        int i1403;
 89.1507 +        int i1404;
 89.1508 +        int i1405;
 89.1509 +        int i1406;
 89.1510 +        int i1407;
 89.1511 +        int i1408;
 89.1512 +        int i1409;
 89.1513 +        int i1410;
 89.1514 +        int i1411;
 89.1515 +        int i1412;
 89.1516 +        int i1413;
 89.1517 +        int i1414;
 89.1518 +        int i1415;
 89.1519 +        int i1416;
 89.1520 +        int i1417;
 89.1521 +        int i1418;
 89.1522 +        int i1419;
 89.1523 +        int i1420;
 89.1524 +        int i1421;
 89.1525 +        int i1422;
 89.1526 +        int i1423;
 89.1527 +        int i1424;
 89.1528 +        int i1425;
 89.1529 +        int i1426;
 89.1530 +        int i1427;
 89.1531 +        int i1428;
 89.1532 +        int i1429;
 89.1533 +        int i1430;
 89.1534 +        int i1431;
 89.1535 +        int i1432;
 89.1536 +        int i1433;
 89.1537 +        int i1434;
 89.1538 +        int i1435;
 89.1539 +        int i1436;
 89.1540 +        int i1437;
 89.1541 +        int i1438;
 89.1542 +        int i1439;
 89.1543 +        int i1440;
 89.1544 +        int i1441;
 89.1545 +        int i1442;
 89.1546 +        int i1443;
 89.1547 +        int i1444;
 89.1548 +        int i1445;
 89.1549 +        int i1446;
 89.1550 +        int i1447;
 89.1551 +        int i1448;
 89.1552 +        int i1449;
 89.1553 +        int i1450;
 89.1554 +        int i1451;
 89.1555 +        int i1452;
 89.1556 +        int i1453;
 89.1557 +        int i1454;
 89.1558 +        int i1455;
 89.1559 +        int i1456;
 89.1560 +        int i1457;
 89.1561 +        int i1458;
 89.1562 +        int i1459;
 89.1563 +        int i1460;
 89.1564 +        int i1461;
 89.1565 +        int i1462;
 89.1566 +        int i1463;
 89.1567 +        int i1464;
 89.1568 +        int i1465;
 89.1569 +        int i1466;
 89.1570 +        int i1467;
 89.1571 +        int i1468;
 89.1572 +        int i1469;
 89.1573 +        int i1470;
 89.1574 +        int i1471;
 89.1575 +        int i1472;
 89.1576 +        int i1473;
 89.1577 +        int i1474;
 89.1578 +        int i1475;
 89.1579 +        int i1476;
 89.1580 +        int i1477;
 89.1581 +        int i1478;
 89.1582 +        int i1479;
 89.1583 +        int i1480;
 89.1584 +        int i1481;
 89.1585 +        int i1482;
 89.1586 +        int i1483;
 89.1587 +        int i1484;
 89.1588 +        int i1485;
 89.1589 +        int i1486;
 89.1590 +        int i1487;
 89.1591 +        int i1488;
 89.1592 +        int i1489;
 89.1593 +        int i1490;
 89.1594 +        int i1491;
 89.1595 +        int i1492;
 89.1596 +        int i1493;
 89.1597 +        int i1494;
 89.1598 +        int i1495;
 89.1599 +        int i1496;
 89.1600 +        int i1497;
 89.1601 +        int i1498;
 89.1602 +        int i1499;
 89.1603 +        int i1500;
 89.1604 +        int i1501;
 89.1605 +        int i1502;
 89.1606 +        int i1503;
 89.1607 +        int i1504;
 89.1608 +        int i1505;
 89.1609 +        int i1506;
 89.1610 +        int i1507;
 89.1611 +        int i1508;
 89.1612 +        int i1509;
 89.1613 +        int i1510;
 89.1614 +        int i1511;
 89.1615 +        int i1512;
 89.1616 +        int i1513;
 89.1617 +        int i1514;
 89.1618 +        int i1515;
 89.1619 +        int i1516;
 89.1620 +        int i1517;
 89.1621 +        int i1518;
 89.1622 +        int i1519;
 89.1623 +        int i1520;
 89.1624 +        int i1521;
 89.1625 +        int i1522;
 89.1626 +        int i1523;
 89.1627 +        int i1524;
 89.1628 +        int i1525;
 89.1629 +        int i1526;
 89.1630 +        int i1527;
 89.1631 +        int i1528;
 89.1632 +        int i1529;
 89.1633 +        int i1530;
 89.1634 +        int i1531;
 89.1635 +        int i1532;
 89.1636 +        int i1533;
 89.1637 +        int i1534;
 89.1638 +        int i1535;
 89.1639 +        int i1536;
 89.1640 +        int i1537;
 89.1641 +        int i1538;
 89.1642 +        int i1539;
 89.1643 +        int i1540;
 89.1644 +        int i1541;
 89.1645 +        int i1542;
 89.1646 +        int i1543;
 89.1647 +        int i1544;
 89.1648 +        int i1545;
 89.1649 +        int i1546;
 89.1650 +        int i1547;
 89.1651 +        int i1548;
 89.1652 +        int i1549;
 89.1653 +        int i1550;
 89.1654 +        int i1551;
 89.1655 +        int i1552;
 89.1656 +        int i1553;
 89.1657 +        int i1554;
 89.1658 +        int i1555;
 89.1659 +        int i1556;
 89.1660 +        int i1557;
 89.1661 +        int i1558;
 89.1662 +        int i1559;
 89.1663 +        int i1560;
 89.1664 +        int i1561;
 89.1665 +        int i1562;
 89.1666 +        int i1563;
 89.1667 +        int i1564;
 89.1668 +        int i1565;
 89.1669 +        int i1566;
 89.1670 +        int i1567;
 89.1671 +        int i1568;
 89.1672 +        int i1569;
 89.1673 +        int i1570;
 89.1674 +        int i1571;
 89.1675 +        int i1572;
 89.1676 +        int i1573;
 89.1677 +        int i1574;
 89.1678 +        int i1575;
 89.1679 +        int i1576;
 89.1680 +        int i1577;
 89.1681 +        int i1578;
 89.1682 +        int i1579;
 89.1683 +        int i1580;
 89.1684 +        int i1581;
 89.1685 +        int i1582;
 89.1686 +        int i1583;
 89.1687 +        int i1584;
 89.1688 +        int i1585;
 89.1689 +        int i1586;
 89.1690 +        int i1587;
 89.1691 +        int i1588;
 89.1692 +        int i1589;
 89.1693 +        int i1590;
 89.1694 +        int i1591;
 89.1695 +        int i1592;
 89.1696 +        int i1593;
 89.1697 +        int i1594;
 89.1698 +        int i1595;
 89.1699 +        int i1596;
 89.1700 +        int i1597;
 89.1701 +        int i1598;
 89.1702 +        int i1599;
 89.1703 +        int i1600;
 89.1704 +        int i1601;
 89.1705 +        int i1602;
 89.1706 +        int i1603;
 89.1707 +        int i1604;
 89.1708 +        int i1605;
 89.1709 +        int i1606;
 89.1710 +        int i1607;
 89.1711 +        int i1608;
 89.1712 +        int i1609;
 89.1713 +        int i1610;
 89.1714 +        int i1611;
 89.1715 +        int i1612;
 89.1716 +        int i1613;
 89.1717 +        int i1614;
 89.1718 +        int i1615;
 89.1719 +        int i1616;
 89.1720 +        int i1617;
 89.1721 +        int i1618;
 89.1722 +        int i1619;
 89.1723 +        int i1620;
 89.1724 +        int i1621;
 89.1725 +        int i1622;
 89.1726 +        int i1623;
 89.1727 +        int i1624;
 89.1728 +        int i1625;
 89.1729 +        int i1626;
 89.1730 +        int i1627;
 89.1731 +        int i1628;
 89.1732 +        int i1629;
 89.1733 +        int i1630;
 89.1734 +        int i1631;
 89.1735 +        int i1632;
 89.1736 +        int i1633;
 89.1737 +        int i1634;
 89.1738 +        int i1635;
 89.1739 +        int i1636;
 89.1740 +        int i1637;
 89.1741 +        int i1638;
 89.1742 +        int i1639;
 89.1743 +        int i1640;
 89.1744 +        int i1641;
 89.1745 +        int i1642;
 89.1746 +        int i1643;
 89.1747 +        int i1644;
 89.1748 +        int i1645;
 89.1749 +        int i1646;
 89.1750 +        int i1647;
 89.1751 +        int i1648;
 89.1752 +        int i1649;
 89.1753 +        int i1650;
 89.1754 +        int i1651;
 89.1755 +        int i1652;
 89.1756 +        int i1653;
 89.1757 +        int i1654;
 89.1758 +        int i1655;
 89.1759 +        int i1656;
 89.1760 +        int i1657;
 89.1761 +        int i1658;
 89.1762 +        int i1659;
 89.1763 +        int i1660;
 89.1764 +        int i1661;
 89.1765 +        int i1662;
 89.1766 +        int i1663;
 89.1767 +        int i1664;
 89.1768 +        int i1665;
 89.1769 +        int i1666;
 89.1770 +        int i1667;
 89.1771 +        int i1668;
 89.1772 +        int i1669;
 89.1773 +        int i1670;
 89.1774 +        int i1671;
 89.1775 +        int i1672;
 89.1776 +        int i1673;
 89.1777 +        int i1674;
 89.1778 +        int i1675;
 89.1779 +        int i1676;
 89.1780 +        int i1677;
 89.1781 +        int i1678;
 89.1782 +        int i1679;
 89.1783 +        int i1680;
 89.1784 +        int i1681;
 89.1785 +        int i1682;
 89.1786 +        int i1683;
 89.1787 +        int i1684;
 89.1788 +        int i1685;
 89.1789 +        int i1686;
 89.1790 +        int i1687;
 89.1791 +        int i1688;
 89.1792 +        int i1689;
 89.1793 +        int i1690;
 89.1794 +        int i1691;
 89.1795 +        int i1692;
 89.1796 +        int i1693;
 89.1797 +        int i1694;
 89.1798 +        int i1695;
 89.1799 +        int i1696;
 89.1800 +        int i1697;
 89.1801 +        int i1698;
 89.1802 +        int i1699;
 89.1803 +        int i1700;
 89.1804 +        int i1701;
 89.1805 +        int i1702;
 89.1806 +        int i1703;
 89.1807 +        int i1704;
 89.1808 +        int i1705;
 89.1809 +        int i1706;
 89.1810 +        int i1707;
 89.1811 +        int i1708;
 89.1812 +        int i1709;
 89.1813 +        int i1710;
 89.1814 +        int i1711;
 89.1815 +        int i1712;
 89.1816 +        int i1713;
 89.1817 +        int i1714;
 89.1818 +        int i1715;
 89.1819 +        int i1716;
 89.1820 +        int i1717;
 89.1821 +        int i1718;
 89.1822 +        int i1719;
 89.1823 +        int i1720;
 89.1824 +        int i1721;
 89.1825 +        int i1722;
 89.1826 +        int i1723;
 89.1827 +        int i1724;
 89.1828 +        int i1725;
 89.1829 +        int i1726;
 89.1830 +        int i1727;
 89.1831 +        int i1728;
 89.1832 +        int i1729;
 89.1833 +        int i1730;
 89.1834 +        int i1731;
 89.1835 +        int i1732;
 89.1836 +        int i1733;
 89.1837 +        int i1734;
 89.1838 +        int i1735;
 89.1839 +        int i1736;
 89.1840 +        int i1737;
 89.1841 +        int i1738;
 89.1842 +        int i1739;
 89.1843 +        int i1740;
 89.1844 +        int i1741;
 89.1845 +        int i1742;
 89.1846 +        int i1743;
 89.1847 +        int i1744;
 89.1848 +        int i1745;
 89.1849 +        int i1746;
 89.1850 +        int i1747;
 89.1851 +        int i1748;
 89.1852 +        int i1749;
 89.1853 +        int i1750;
 89.1854 +        int i1751;
 89.1855 +        int i1752;
 89.1856 +        int i1753;
 89.1857 +        int i1754;
 89.1858 +        int i1755;
 89.1859 +        int i1756;
 89.1860 +        int i1757;
 89.1861 +        int i1758;
 89.1862 +        int i1759;
 89.1863 +        int i1760;
 89.1864 +        int i1761;
 89.1865 +        int i1762;
 89.1866 +        int i1763;
 89.1867 +        int i1764;
 89.1868 +        int i1765;
 89.1869 +        int i1766;
 89.1870 +        int i1767;
 89.1871 +        int i1768;
 89.1872 +        int i1769;
 89.1873 +        int i1770;
 89.1874 +        int i1771;
 89.1875 +        int i1772;
 89.1876 +        int i1773;
 89.1877 +        int i1774;
 89.1878 +        int i1775;
 89.1879 +        int i1776;
 89.1880 +        int i1777;
 89.1881 +        int i1778;
 89.1882 +        int i1779;
 89.1883 +        int i1780;
 89.1884 +        int i1781;
 89.1885 +        int i1782;
 89.1886 +        int i1783;
 89.1887 +        int i1784;
 89.1888 +        int i1785;
 89.1889 +        int i1786;
 89.1890 +        int i1787;
 89.1891 +        int i1788;
 89.1892 +        int i1789;
 89.1893 +        int i1790;
 89.1894 +        int i1791;
 89.1895 +        int i1792;
 89.1896 +        int i1793;
 89.1897 +        int i1794;
 89.1898 +        int i1795;
 89.1899 +        int i1796;
 89.1900 +        int i1797;
 89.1901 +        int i1798;
 89.1902 +        int i1799;
 89.1903 +        int i1800;
 89.1904 +        int i1801;
 89.1905 +        int i1802;
 89.1906 +        int i1803;
 89.1907 +        int i1804;
 89.1908 +        int i1805;
 89.1909 +        int i1806;
 89.1910 +        int i1807;
 89.1911 +        int i1808;
 89.1912 +        int i1809;
 89.1913 +        int i1810;
 89.1914 +        int i1811;
 89.1915 +        int i1812;
 89.1916 +        int i1813;
 89.1917 +        int i1814;
 89.1918 +        int i1815;
 89.1919 +        int i1816;
 89.1920 +        int i1817;
 89.1921 +        int i1818;
 89.1922 +        int i1819;
 89.1923 +        int i1820;
 89.1924 +        int i1821;
 89.1925 +        int i1822;
 89.1926 +        int i1823;
 89.1927 +        int i1824;
 89.1928 +        int i1825;
 89.1929 +        int i1826;
 89.1930 +        int i1827;
 89.1931 +        int i1828;
 89.1932 +        int i1829;
 89.1933 +        int i1830;
 89.1934 +        int i1831;
 89.1935 +        int i1832;
 89.1936 +        int i1833;
 89.1937 +        int i1834;
 89.1938 +        int i1835;
 89.1939 +        int i1836;
 89.1940 +        int i1837;
 89.1941 +        int i1838;
 89.1942 +        int i1839;
 89.1943 +        int i1840;
 89.1944 +        int i1841;
 89.1945 +        int i1842;
 89.1946 +        int i1843;
 89.1947 +        int i1844;
 89.1948 +        int i1845;
 89.1949 +        int i1846;
 89.1950 +        int i1847;
 89.1951 +        int i1848;
 89.1952 +        int i1849;
 89.1953 +        int i1850;
 89.1954 +        int i1851;
 89.1955 +        int i1852;
 89.1956 +        int i1853;
 89.1957 +        int i1854;
 89.1958 +        int i1855;
 89.1959 +        int i1856;
 89.1960 +        int i1857;
 89.1961 +        int i1858;
 89.1962 +        int i1859;
 89.1963 +        int i1860;
 89.1964 +        int i1861;
 89.1965 +        int i1862;
 89.1966 +        int i1863;
 89.1967 +        int i1864;
 89.1968 +        int i1865;
 89.1969 +        int i1866;
 89.1970 +        int i1867;
 89.1971 +        int i1868;
 89.1972 +        int i1869;
 89.1973 +        int i1870;
 89.1974 +        int i1871;
 89.1975 +        int i1872;
 89.1976 +        int i1873;
 89.1977 +        int i1874;
 89.1978 +        int i1875;
 89.1979 +        int i1876;
 89.1980 +        int i1877;
 89.1981 +        int i1878;
 89.1982 +        int i1879;
 89.1983 +        int i1880;
 89.1984 +        int i1881;
 89.1985 +        int i1882;
 89.1986 +        int i1883;
 89.1987 +        int i1884;
 89.1988 +        int i1885;
 89.1989 +        int i1886;
 89.1990 +        int i1887;
 89.1991 +        int i1888;
 89.1992 +        int i1889;
 89.1993 +        int i1890;
 89.1994 +        int i1891;
 89.1995 +        int i1892;
 89.1996 +        int i1893;
 89.1997 +        int i1894;
 89.1998 +        int i1895;
 89.1999 +        int i1896;
 89.2000 +        int i1897;
 89.2001 +        int i1898;
 89.2002 +        int i1899;
 89.2003 +        int i1900;
 89.2004 +        int i1901;
 89.2005 +        int i1902;
 89.2006 +        int i1903;
 89.2007 +        int i1904;
 89.2008 +        int i1905;
 89.2009 +        int i1906;
 89.2010 +        int i1907;
 89.2011 +        int i1908;
 89.2012 +        int i1909;
 89.2013 +        int i1910;
 89.2014 +        int i1911;
 89.2015 +        int i1912;
 89.2016 +        int i1913;
 89.2017 +        int i1914;
 89.2018 +        int i1915;
 89.2019 +        int i1916;
 89.2020 +        int i1917;
 89.2021 +        int i1918;
 89.2022 +        int i1919;
 89.2023 +        int i1920;
 89.2024 +        int i1921;
 89.2025 +        int i1922;
 89.2026 +        int i1923;
 89.2027 +        int i1924;
 89.2028 +        int i1925;
 89.2029 +        int i1926;
 89.2030 +        int i1927;
 89.2031 +        int i1928;
 89.2032 +        int i1929;
 89.2033 +        int i1930;
 89.2034 +        int i1931;
 89.2035 +        int i1932;
 89.2036 +        int i1933;
 89.2037 +        int i1934;
 89.2038 +        int i1935;
 89.2039 +        int i1936;
 89.2040 +        int i1937;
 89.2041 +        int i1938;
 89.2042 +        int i1939;
 89.2043 +        int i1940;
 89.2044 +        int i1941;
 89.2045 +        int i1942;
 89.2046 +        int i1943;
 89.2047 +        int i1944;
 89.2048 +        int i1945;
 89.2049 +        int i1946;
 89.2050 +        int i1947;
 89.2051 +        int i1948;
 89.2052 +        int i1949;
 89.2053 +        int i1950;
 89.2054 +        int i1951;
 89.2055 +        int i1952;
 89.2056 +        int i1953;
 89.2057 +        int i1954;
 89.2058 +        int i1955;
 89.2059 +        int i1956;
 89.2060 +        int i1957;
 89.2061 +        int i1958;
 89.2062 +        int i1959;
 89.2063 +        int i1960;
 89.2064 +        int i1961;
 89.2065 +        int i1962;
 89.2066 +        int i1963;
 89.2067 +        int i1964;
 89.2068 +        int i1965;
 89.2069 +        int i1966;
 89.2070 +        int i1967;
 89.2071 +        int i1968;
 89.2072 +        int i1969;
 89.2073 +        int i1970;
 89.2074 +        int i1971;
 89.2075 +        int i1972;
 89.2076 +        int i1973;
 89.2077 +        int i1974;
 89.2078 +        int i1975;
 89.2079 +        int i1976;
 89.2080 +        int i1977;
 89.2081 +        int i1978;
 89.2082 +        int i1979;
 89.2083 +        int i1980;
 89.2084 +        int i1981;
 89.2085 +        int i1982;
 89.2086 +        int i1983;
 89.2087 +        int i1984;
 89.2088 +        int i1985;
 89.2089 +        int i1986;
 89.2090 +        int i1987;
 89.2091 +        int i1988;
 89.2092 +        int i1989;
 89.2093 +        int i1990;
 89.2094 +        int i1991;
 89.2095 +        int i1992;
 89.2096 +        int i1993;
 89.2097 +        int i1994;
 89.2098 +        int i1995;
 89.2099 +        int i1996;
 89.2100 +        int i1997;
 89.2101 +        int i1998;
 89.2102 +        int i1999;
 89.2103 +        int i2000;
 89.2104 +        int i2001;
 89.2105 +        int i2002;
 89.2106 +        int i2003;
 89.2107 +        int i2004;
 89.2108 +        int i2005;
 89.2109 +        int i2006;
 89.2110 +        int i2007;
 89.2111 +        int i2008;
 89.2112 +        int i2009;
 89.2113 +        int i2010;
 89.2114 +        int i2011;
 89.2115 +        int i2012;
 89.2116 +        int i2013;
 89.2117 +        int i2014;
 89.2118 +        int i2015;
 89.2119 +        int i2016;
 89.2120 +        int i2017;
 89.2121 +        int i2018;
 89.2122 +        int i2019;
 89.2123 +        int i2020;
 89.2124 +        int i2021;
 89.2125 +        int i2022;
 89.2126 +        int i2023;
 89.2127 +        int i2024;
 89.2128 +        int i2025;
 89.2129 +        int i2026;
 89.2130 +        int i2027;
 89.2131 +        int i2028;
 89.2132 +        int i2029;
 89.2133 +        int i2030;
 89.2134 +        int i2031;
 89.2135 +        int i2032;
 89.2136 +        int i2033;
 89.2137 +        int i2034;
 89.2138 +        int i2035;
 89.2139 +        int i2036;
 89.2140 +        int i2037;
 89.2141 +        int i2038;
 89.2142 +        int i2039;
 89.2143 +        int i2040;
 89.2144 +        int i2041;
 89.2145 +        int i2042;
 89.2146 +        int i2043;
 89.2147 +        int i2044;
 89.2148 +        int i2045;
 89.2149 +        int i2046;
 89.2150 +        int i2047;
 89.2151 +        int i2048;
 89.2152 +        int i2049;
 89.2153 +        int i2050;
 89.2154 +        int i2051;
 89.2155 +        int i2052;
 89.2156 +        int i2053;
 89.2157 +        int i2054;
 89.2158 +        int i2055;
 89.2159 +        int i2056;
 89.2160 +        int i2057;
 89.2161 +        int i2058;
 89.2162 +        int i2059;
 89.2163 +        int i2060;
 89.2164 +        int i2061;
 89.2165 +        int i2062;
 89.2166 +        int i2063;
 89.2167 +        int i2064;
 89.2168 +        int i2065;
 89.2169 +        int i2066;
 89.2170 +        int i2067;
 89.2171 +        int i2068;
 89.2172 +        int i2069;
 89.2173 +        int i2070;
 89.2174 +        int i2071;
 89.2175 +        int i2072;
 89.2176 +        int i2073;
 89.2177 +        int i2074;
 89.2178 +        int i2075;
 89.2179 +        int i2076;
 89.2180 +        int i2077;
 89.2181 +        int i2078;
 89.2182 +        int i2079;
 89.2183 +        int i2080;
 89.2184 +        int i2081;
 89.2185 +        int i2082;
 89.2186 +        int i2083;
 89.2187 +        int i2084;
 89.2188 +        int i2085;
 89.2189 +        int i2086;
 89.2190 +        int i2087;
 89.2191 +        int i2088;
 89.2192 +        int i2089;
 89.2193 +        int i2090;
 89.2194 +        int i2091;
 89.2195 +        int i2092;
 89.2196 +        int i2093;
 89.2197 +        int i2094;
 89.2198 +        int i2095;
 89.2199 +        int i2096;
 89.2200 +        int i2097;
 89.2201 +        int i2098;
 89.2202 +        int i2099;
 89.2203 +        int i2100;
 89.2204 +        int i2101;
 89.2205 +        int i2102;
 89.2206 +        int i2103;
 89.2207 +        int i2104;
 89.2208 +        int i2105;
 89.2209 +        int i2106;
 89.2210 +        int i2107;
 89.2211 +        int i2108;
 89.2212 +        int i2109;
 89.2213 +        int i2110;
 89.2214 +        int i2111;
 89.2215 +        int i2112;
 89.2216 +        int i2113;
 89.2217 +        int i2114;
 89.2218 +        int i2115;
 89.2219 +        int i2116;
 89.2220 +        int i2117;
 89.2221 +        int i2118;
 89.2222 +        int i2119;
 89.2223 +        int i2120;
 89.2224 +        int i2121;
 89.2225 +        int i2122;
 89.2226 +        int i2123;
 89.2227 +        int i2124;
 89.2228 +        int i2125;
 89.2229 +        int i2126;
 89.2230 +        int i2127;
 89.2231 +        int i2128;
 89.2232 +        int i2129;
 89.2233 +        int i2130;
 89.2234 +        int i2131;
 89.2235 +        int i2132;
 89.2236 +        int i2133;
 89.2237 +        int i2134;
 89.2238 +        int i2135;
 89.2239 +        int i2136;
 89.2240 +        int i2137;
 89.2241 +        int i2138;
 89.2242 +        int i2139;
 89.2243 +        int i2140;
 89.2244 +        int i2141;
 89.2245 +        int i2142;
 89.2246 +        int i2143;
 89.2247 +        int i2144;
 89.2248 +        int i2145;
 89.2249 +        int i2146;
 89.2250 +        int i2147;
 89.2251 +        int i2148;
 89.2252 +        int i2149;
 89.2253 +        int i2150;
 89.2254 +        int i2151;
 89.2255 +        int i2152;
 89.2256 +        int i2153;
 89.2257 +        int i2154;
 89.2258 +        int i2155;
 89.2259 +        int i2156;
 89.2260 +        int i2157;
 89.2261 +        int i2158;
 89.2262 +        int i2159;
 89.2263 +        int i2160;
 89.2264 +        int i2161;
 89.2265 +        int i2162;
 89.2266 +        int i2163;
 89.2267 +        int i2164;
 89.2268 +        int i2165;
 89.2269 +        int i2166;
 89.2270 +        int i2167;
 89.2271 +        int i2168;
 89.2272 +        int i2169;
 89.2273 +        int i2170;
 89.2274 +        int i2171;
 89.2275 +        int i2172;
 89.2276 +        int i2173;
 89.2277 +        int i2174;
 89.2278 +        int i2175;
 89.2279 +        int i2176;
 89.2280 +        int i2177;
 89.2281 +        int i2178;
 89.2282 +        int i2179;
 89.2283 +        int i2180;
 89.2284 +        int i2181;
 89.2285 +        int i2182;
 89.2286 +        int i2183;
 89.2287 +        int i2184;
 89.2288 +        int i2185;
 89.2289 +        int i2186;
 89.2290 +        int i2187;
 89.2291 +        int i2188;
 89.2292 +        int i2189;
 89.2293 +        int i2190;
 89.2294 +        int i2191;
 89.2295 +        int i2192;
 89.2296 +        int i2193;
 89.2297 +        int i2194;
 89.2298 +        int i2195;
 89.2299 +        int i2196;
 89.2300 +        int i2197;
 89.2301 +        int i2198;
 89.2302 +        int i2199;
 89.2303 +        int i2200;
 89.2304 +        int i2201;
 89.2305 +        int i2202;
 89.2306 +        int i2203;
 89.2307 +        int i2204;
 89.2308 +        int i2205;
 89.2309 +        int i2206;
 89.2310 +        int i2207;
 89.2311 +        int i2208;
 89.2312 +        int i2209;
 89.2313 +        int i2210;
 89.2314 +        int i2211;
 89.2315 +        int i2212;
 89.2316 +        int i2213;
 89.2317 +        int i2214;
 89.2318 +        int i2215;
 89.2319 +        int i2216;
 89.2320 +        int i2217;
 89.2321 +        int i2218;
 89.2322 +        int i2219;
 89.2323 +        int i2220;
 89.2324 +        int i2221;
 89.2325 +        int i2222;
 89.2326 +        int i2223;
 89.2327 +        int i2224;
 89.2328 +        int i2225;
 89.2329 +        int i2226;
 89.2330 +        int i2227;
 89.2331 +        int i2228;
 89.2332 +        int i2229;
 89.2333 +        int i2230;
 89.2334 +        int i2231;
 89.2335 +        int i2232;
 89.2336 +        int i2233;
 89.2337 +        int i2234;
 89.2338 +        int i2235;
 89.2339 +        int i2236;
 89.2340 +        int i2237;
 89.2341 +        int i2238;
 89.2342 +        int i2239;
 89.2343 +        int i2240;
 89.2344 +        int i2241;
 89.2345 +        int i2242;
 89.2346 +        int i2243;
 89.2347 +        int i2244;
 89.2348 +        int i2245;
 89.2349 +        int i2246;
 89.2350 +        int i2247;
 89.2351 +        int i2248;
 89.2352 +        int i2249;
 89.2353 +        int i2250;
 89.2354 +        int i2251;
 89.2355 +        int i2252;
 89.2356 +        int i2253;
 89.2357 +        int i2254;
 89.2358 +        int i2255;
 89.2359 +        int i2256;
 89.2360 +        int i2257;
 89.2361 +        int i2258;
 89.2362 +        int i2259;
 89.2363 +        int i2260;
 89.2364 +        int i2261;
 89.2365 +        int i2262;
 89.2366 +        int i2263;
 89.2367 +        int i2264;
 89.2368 +        int i2265;
 89.2369 +        int i2266;
 89.2370 +        int i2267;
 89.2371 +        int i2268;
 89.2372 +        int i2269;
 89.2373 +        int i2270;
 89.2374 +        int i2271;
 89.2375 +        int i2272;
 89.2376 +        int i2273;
 89.2377 +        int i2274;
 89.2378 +        int i2275;
 89.2379 +        int i2276;
 89.2380 +        int i2277;
 89.2381 +        int i2278;
 89.2382 +        int i2279;
 89.2383 +        int i2280;
 89.2384 +        int i2281;
 89.2385 +        int i2282;
 89.2386 +        int i2283;
 89.2387 +        int i2284;
 89.2388 +        int i2285;
 89.2389 +        int i2286;
 89.2390 +        int i2287;
 89.2391 +        int i2288;
 89.2392 +        int i2289;
 89.2393 +        int i2290;
 89.2394 +        int i2291;
 89.2395 +        int i2292;
 89.2396 +        int i2293;
 89.2397 +        int i2294;
 89.2398 +        int i2295;
 89.2399 +        int i2296;
 89.2400 +        int i2297;
 89.2401 +        int i2298;
 89.2402 +        int i2299;
 89.2403 +        int i2300;
 89.2404 +        int i2301;
 89.2405 +        int i2302;
 89.2406 +        int i2303;
 89.2407 +        int i2304;
 89.2408 +        int i2305;
 89.2409 +        int i2306;
 89.2410 +        int i2307;
 89.2411 +        int i2308;
 89.2412 +        int i2309;
 89.2413 +        int i2310;
 89.2414 +        int i2311;
 89.2415 +        int i2312;
 89.2416 +        int i2313;
 89.2417 +        int i2314;
 89.2418 +        int i2315;
 89.2419 +        int i2316;
 89.2420 +        int i2317;
 89.2421 +        int i2318;
 89.2422 +        int i2319;
 89.2423 +        int i2320;
 89.2424 +        int i2321;
 89.2425 +        int i2322;
 89.2426 +        int i2323;
 89.2427 +        int i2324;
 89.2428 +        int i2325;
 89.2429 +        int i2326;
 89.2430 +        int i2327;
 89.2431 +        int i2328;
 89.2432 +        int i2329;
 89.2433 +        int i2330;
 89.2434 +        int i2331;
 89.2435 +        int i2332;
 89.2436 +        int i2333;
 89.2437 +        int i2334;
 89.2438 +        int i2335;
 89.2439 +        int i2336;
 89.2440 +        int i2337;
 89.2441 +        int i2338;
 89.2442 +        int i2339;
 89.2443 +        int i2340;
 89.2444 +        int i2341;
 89.2445 +        int i2342;
 89.2446 +        int i2343;
 89.2447 +        int i2344;
 89.2448 +        int i2345;
 89.2449 +        int i2346;
 89.2450 +        int i2347;
 89.2451 +        int i2348;
 89.2452 +        int i2349;
 89.2453 +        int i2350;
 89.2454 +        int i2351;
 89.2455 +        int i2352;
 89.2456 +        int i2353;
 89.2457 +        int i2354;
 89.2458 +        int i2355;
 89.2459 +        int i2356;
 89.2460 +        int i2357;
 89.2461 +        int i2358;
 89.2462 +        int i2359;
 89.2463 +        int i2360;
 89.2464 +        int i2361;
 89.2465 +        int i2362;
 89.2466 +        int i2363;
 89.2467 +        int i2364;
 89.2468 +        int i2365;
 89.2469 +        int i2366;
 89.2470 +        int i2367;
 89.2471 +        int i2368;
 89.2472 +        int i2369;
 89.2473 +        int i2370;
 89.2474 +        int i2371;
 89.2475 +        int i2372;
 89.2476 +        int i2373;
 89.2477 +        int i2374;
 89.2478 +        int i2375;
 89.2479 +        int i2376;
 89.2480 +        int i2377;
 89.2481 +        int i2378;
 89.2482 +        int i2379;
 89.2483 +        int i2380;
 89.2484 +        int i2381;
 89.2485 +        int i2382;
 89.2486 +        int i2383;
 89.2487 +        int i2384;
 89.2488 +        int i2385;
 89.2489 +        int i2386;
 89.2490 +        int i2387;
 89.2491 +        int i2388;
 89.2492 +        int i2389;
 89.2493 +        int i2390;
 89.2494 +        int i2391;
 89.2495 +        int i2392;
 89.2496 +        int i2393;
 89.2497 +        int i2394;
 89.2498 +        int i2395;
 89.2499 +        int i2396;
 89.2500 +        int i2397;
 89.2501 +        int i2398;
 89.2502 +        int i2399;
 89.2503 +        int i2400;
 89.2504 +        int i2401;
 89.2505 +        int i2402;
 89.2506 +        int i2403;
 89.2507 +        int i2404;
 89.2508 +        int i2405;
 89.2509 +        int i2406;
 89.2510 +        int i2407;
 89.2511 +        int i2408;
 89.2512 +        int i2409;
 89.2513 +        int i2410;
 89.2514 +        int i2411;
 89.2515 +        int i2412;
 89.2516 +        int i2413;
 89.2517 +        int i2414;
 89.2518 +        int i2415;
 89.2519 +        int i2416;
 89.2520 +        int i2417;
 89.2521 +        int i2418;
 89.2522 +        int i2419;
 89.2523 +        int i2420;
 89.2524 +        int i2421;
 89.2525 +        int i2422;
 89.2526 +        int i2423;
 89.2527 +        int i2424;
 89.2528 +        int i2425;
 89.2529 +        int i2426;
 89.2530 +        int i2427;
 89.2531 +        int i2428;
 89.2532 +        int i2429;
 89.2533 +        int i2430;
 89.2534 +        int i2431;
 89.2535 +        int i2432;
 89.2536 +        int i2433;
 89.2537 +        int i2434;
 89.2538 +        int i2435;
 89.2539 +        int i2436;
 89.2540 +        int i2437;
 89.2541 +        int i2438;
 89.2542 +        int i2439;
 89.2543 +        int i2440;
 89.2544 +        int i2441;
 89.2545 +        int i2442;
 89.2546 +        int i2443;
 89.2547 +        int i2444;
 89.2548 +        int i2445;
 89.2549 +        int i2446;
 89.2550 +        int i2447;
 89.2551 +        int i2448;
 89.2552 +        int i2449;
 89.2553 +        int i2450;
 89.2554 +        int i2451;
 89.2555 +        int i2452;
 89.2556 +        int i2453;
 89.2557 +        int i2454;
 89.2558 +        int i2455;
 89.2559 +        int i2456;
 89.2560 +        int i2457;
 89.2561 +        int i2458;
 89.2562 +        int i2459;
 89.2563 +        int i2460;
 89.2564 +        int i2461;
 89.2565 +        int i2462;
 89.2566 +        int i2463;
 89.2567 +        int i2464;
 89.2568 +        int i2465;
 89.2569 +        int i2466;
 89.2570 +        int i2467;
 89.2571 +        int i2468;
 89.2572 +        int i2469;
 89.2573 +        int i2470;
 89.2574 +        int i2471;
 89.2575 +        int i2472;
 89.2576 +        int i2473;
 89.2577 +        int i2474;
 89.2578 +        int i2475;
 89.2579 +        int i2476;
 89.2580 +        int i2477;
 89.2581 +        int i2478;
 89.2582 +        int i2479;
 89.2583 +        int i2480;
 89.2584 +        int i2481;
 89.2585 +        int i2482;
 89.2586 +        int i2483;
 89.2587 +        int i2484;
 89.2588 +        int i2485;
 89.2589 +        int i2486;
 89.2590 +        int i2487;
 89.2591 +        int i2488;
 89.2592 +        int i2489;
 89.2593 +        int i2490;
 89.2594 +        int i2491;
 89.2595 +        int i2492;
 89.2596 +        int i2493;
 89.2597 +        int i2494;
 89.2598 +        int i2495;
 89.2599 +        int i2496;
 89.2600 +        int i2497;
 89.2601 +        int i2498;
 89.2602 +        int i2499;
 89.2603 +        int i2500;
 89.2604 +        int i2501;
 89.2605 +        int i2502;
 89.2606 +        int i2503;
 89.2607 +        int i2504;
 89.2608 +        int i2505;
 89.2609 +        int i2506;
 89.2610 +        int i2507;
 89.2611 +        int i2508;
 89.2612 +        int i2509;
 89.2613 +        int i2510;
 89.2614 +        int i2511;
 89.2615 +        int i2512;
 89.2616 +        int i2513;
 89.2617 +        int i2514;
 89.2618 +        int i2515;
 89.2619 +        int i2516;
 89.2620 +        int i2517;
 89.2621 +        int i2518;
 89.2622 +        int i2519;
 89.2623 +        int i2520;
 89.2624 +        int i2521;
 89.2625 +        int i2522;
 89.2626 +        int i2523;
 89.2627 +        int i2524;
 89.2628 +        int i2525;
 89.2629 +        int i2526;
 89.2630 +        int i2527;
 89.2631 +        int i2528;
 89.2632 +        int i2529;
 89.2633 +        int i2530;
 89.2634 +        int i2531;
 89.2635 +        int i2532;
 89.2636 +        int i2533;
 89.2637 +        int i2534;
 89.2638 +        int i2535;
 89.2639 +        int i2536;
 89.2640 +        int i2537;
 89.2641 +        int i2538;
 89.2642 +        int i2539;
 89.2643 +        int i2540;
 89.2644 +        int i2541;
 89.2645 +        int i2542;
 89.2646 +        int i2543;
 89.2647 +        int i2544;
 89.2648 +        int i2545;
 89.2649 +        int i2546;
 89.2650 +        int i2547;
 89.2651 +        int i2548;
 89.2652 +        int i2549;
 89.2653 +        int i2550;
 89.2654 +        int i2551;
 89.2655 +        int i2552;
 89.2656 +        int i2553;
 89.2657 +        int i2554;
 89.2658 +        int i2555;
 89.2659 +        int i2556;
 89.2660 +        int i2557;
 89.2661 +        int i2558;
 89.2662 +        int i2559;
 89.2663 +        int i2560;
 89.2664 +        int i2561;
 89.2665 +        int i2562;
 89.2666 +        int i2563;
 89.2667 +        int i2564;
 89.2668 +        int i2565;
 89.2669 +        int i2566;
 89.2670 +        int i2567;
 89.2671 +        int i2568;
 89.2672 +        int i2569;
 89.2673 +        int i2570;
 89.2674 +        int i2571;
 89.2675 +        int i2572;
 89.2676 +        int i2573;
 89.2677 +        int i2574;
 89.2678 +        int i2575;
 89.2679 +        int i2576;
 89.2680 +        int i2577;
 89.2681 +        int i2578;
 89.2682 +        int i2579;
 89.2683 +        int i2580;
 89.2684 +        int i2581;
 89.2685 +        int i2582;
 89.2686 +        int i2583;
 89.2687 +        int i2584;
 89.2688 +        int i2585;
 89.2689 +        int i2586;
 89.2690 +        int i2587;
 89.2691 +        int i2588;
 89.2692 +        int i2589;
 89.2693 +        int i2590;
 89.2694 +        int i2591;
 89.2695 +        int i2592;
 89.2696 +        int i2593;
 89.2697 +        int i2594;
 89.2698 +        int i2595;
 89.2699 +        int i2596;
 89.2700 +        int i2597;
 89.2701 +        int i2598;
 89.2702 +        int i2599;
 89.2703 +        int i2600;
 89.2704 +        int i2601;
 89.2705 +        int i2602;
 89.2706 +        int i2603;
 89.2707 +        int i2604;
 89.2708 +        int i2605;
 89.2709 +        int i2606;
 89.2710 +        int i2607;
 89.2711 +        int i2608;
 89.2712 +        int i2609;
 89.2713 +        int i2610;
 89.2714 +        int i2611;
 89.2715 +        int i2612;
 89.2716 +        int i2613;
 89.2717 +        int i2614;
 89.2718 +        int i2615;
 89.2719 +        int i2616;
 89.2720 +        int i2617;
 89.2721 +        int i2618;
 89.2722 +        int i2619;
 89.2723 +        int i2620;
 89.2724 +        int i2621;
 89.2725 +        int i2622;
 89.2726 +        int i2623;
 89.2727 +        int i2624;
 89.2728 +        int i2625;
 89.2729 +        int i2626;
 89.2730 +        int i2627;
 89.2731 +        int i2628;
 89.2732 +        int i2629;
 89.2733 +        int i2630;
 89.2734 +        int i2631;
 89.2735 +        int i2632;
 89.2736 +        int i2633;
 89.2737 +        int i2634;
 89.2738 +        int i2635;
 89.2739 +        int i2636;
 89.2740 +        int i2637;
 89.2741 +        int i2638;
 89.2742 +        int i2639;
 89.2743 +        int i2640;
 89.2744 +        int i2641;
 89.2745 +        int i2642;
 89.2746 +        int i2643;
 89.2747 +        int i2644;
 89.2748 +        int i2645;
 89.2749 +        int i2646;
 89.2750 +        int i2647;
 89.2751 +        int i2648;
 89.2752 +        int i2649;
 89.2753 +        int i2650;
 89.2754 +        int i2651;
 89.2755 +        int i2652;
 89.2756 +        int i2653;
 89.2757 +        int i2654;
 89.2758 +        int i2655;
 89.2759 +        int i2656;
 89.2760 +        int i2657;
 89.2761 +        int i2658;
 89.2762 +        int i2659;
 89.2763 +        int i2660;
 89.2764 +        int i2661;
 89.2765 +        int i2662;
 89.2766 +        int i2663;
 89.2767 +        int i2664;
 89.2768 +        int i2665;
 89.2769 +        int i2666;
 89.2770 +        int i2667;
 89.2771 +        int i2668;
 89.2772 +        int i2669;
 89.2773 +        int i2670;
 89.2774 +        int i2671;
 89.2775 +        int i2672;
 89.2776 +        int i2673;
 89.2777 +        int i2674;
 89.2778 +        int i2675;
 89.2779 +        int i2676;
 89.2780 +        int i2677;
 89.2781 +        int i2678;
 89.2782 +        int i2679;
 89.2783 +        int i2680;
 89.2784 +        int i2681;
 89.2785 +        int i2682;
 89.2786 +        int i2683;
 89.2787 +        int i2684;
 89.2788 +        int i2685;
 89.2789 +        int i2686;
 89.2790 +        int i2687;
 89.2791 +        int i2688;
 89.2792 +        int i2689;
 89.2793 +        int i2690;
 89.2794 +        int i2691;
 89.2795 +        int i2692;
 89.2796 +        int i2693;
 89.2797 +        int i2694;
 89.2798 +        int i2695;
 89.2799 +        int i2696;
 89.2800 +        int i2697;
 89.2801 +        int i2698;
 89.2802 +        int i2699;
 89.2803 +        int i2700;
 89.2804 +        int i2701;
 89.2805 +        int i2702;
 89.2806 +        int i2703;
 89.2807 +        int i2704;
 89.2808 +        int i2705;
 89.2809 +        int i2706;
 89.2810 +        int i2707;
 89.2811 +        int i2708;
 89.2812 +        int i2709;
 89.2813 +        int i2710;
 89.2814 +        int i2711;
 89.2815 +        int i2712;
 89.2816 +        int i2713;
 89.2817 +        int i2714;
 89.2818 +        int i2715;
 89.2819 +        int i2716;
 89.2820 +        int i2717;
 89.2821 +        int i2718;
 89.2822 +        int i2719;
 89.2823 +        int i2720;
 89.2824 +        int i2721;
 89.2825 +        int i2722;
 89.2826 +        int i2723;
 89.2827 +        int i2724;
 89.2828 +        int i2725;
 89.2829 +        int i2726;
 89.2830 +        int i2727;
 89.2831 +        int i2728;
 89.2832 +        int i2729;
 89.2833 +        int i2730;
 89.2834 +        int i2731;
 89.2835 +        int i2732;
 89.2836 +        int i2733;
 89.2837 +        int i2734;
 89.2838 +        int i2735;
 89.2839 +        int i2736;
 89.2840 +        int i2737;
 89.2841 +        int i2738;
 89.2842 +        int i2739;
 89.2843 +        int i2740;
 89.2844 +        int i2741;
 89.2845 +        int i2742;
 89.2846 +        int i2743;
 89.2847 +        int i2744;
 89.2848 +        int i2745;
 89.2849 +        int i2746;
 89.2850 +        int i2747;
 89.2851 +        int i2748;
 89.2852 +        int i2749;
 89.2853 +        int i2750;
 89.2854 +        int i2751;
 89.2855 +        int i2752;
 89.2856 +        int i2753;
 89.2857 +        int i2754;
 89.2858 +        int i2755;
 89.2859 +        int i2756;
 89.2860 +        int i2757;
 89.2861 +        int i2758;
 89.2862 +        int i2759;
 89.2863 +        int i2760;
 89.2864 +        int i2761;
 89.2865 +        int i2762;
 89.2866 +        int i2763;
 89.2867 +        int i2764;
 89.2868 +        int i2765;
 89.2869 +        int i2766;
 89.2870 +        int i2767;
 89.2871 +        int i2768;
 89.2872 +        int i2769;
 89.2873 +        int i2770;
 89.2874 +        int i2771;
 89.2875 +        int i2772;
 89.2876 +        int i2773;
 89.2877 +        int i2774;
 89.2878 +        int i2775;
 89.2879 +        int i2776;
 89.2880 +        int i2777;
 89.2881 +        int i2778;
 89.2882 +        int i2779;
 89.2883 +        int i2780;
 89.2884 +        int i2781;
 89.2885 +        int i2782;
 89.2886 +        int i2783;
 89.2887 +        int i2784;
 89.2888 +        int i2785;
 89.2889 +        int i2786;
 89.2890 +        int i2787;
 89.2891 +        int i2788;
 89.2892 +        int i2789;
 89.2893 +        int i2790;
 89.2894 +        int i2791;
 89.2895 +        int i2792;
 89.2896 +        int i2793;
 89.2897 +        int i2794;
 89.2898 +        int i2795;
 89.2899 +        int i2796;
 89.2900 +        int i2797;
 89.2901 +        int i2798;
 89.2902 +        int i2799;
 89.2903 +        int i2800;
 89.2904 +        int i2801;
 89.2905 +        int i2802;
 89.2906 +        int i2803;
 89.2907 +        int i2804;
 89.2908 +        int i2805;
 89.2909 +        int i2806;
 89.2910 +        int i2807;
 89.2911 +        int i2808;
 89.2912 +        int i2809;
 89.2913 +        int i2810;
 89.2914 +        int i2811;
 89.2915 +        int i2812;
 89.2916 +        int i2813;
 89.2917 +        int i2814;
 89.2918 +        int i2815;
 89.2919 +        int i2816;
 89.2920 +        int i2817;
 89.2921 +        int i2818;
 89.2922 +        int i2819;
 89.2923 +        int i2820;
 89.2924 +        int i2821;
 89.2925 +        int i2822;
 89.2926 +        int i2823;
 89.2927 +        int i2824;
 89.2928 +        int i2825;
 89.2929 +        int i2826;
 89.2930 +        int i2827;
 89.2931 +        int i2828;
 89.2932 +        int i2829;
 89.2933 +        int i2830;
 89.2934 +        int i2831;
 89.2935 +        int i2832;
 89.2936 +        int i2833;
 89.2937 +        int i2834;
 89.2938 +        int i2835;
 89.2939 +        int i2836;
 89.2940 +        int i2837;
 89.2941 +        int i2838;
 89.2942 +        int i2839;
 89.2943 +        int i2840;
 89.2944 +        int i2841;
 89.2945 +        int i2842;
 89.2946 +        int i2843;
 89.2947 +        int i2844;
 89.2948 +        int i2845;
 89.2949 +        int i2846;
 89.2950 +        int i2847;
 89.2951 +        int i2848;
 89.2952 +        int i2849;
 89.2953 +        int i2850;
 89.2954 +        int i2851;
 89.2955 +        int i2852;
 89.2956 +        int i2853;
 89.2957 +        int i2854;
 89.2958 +        int i2855;
 89.2959 +        int i2856;
 89.2960 +        int i2857;
 89.2961 +        int i2858;
 89.2962 +        int i2859;
 89.2963 +        int i2860;
 89.2964 +        int i2861;
 89.2965 +        int i2862;
 89.2966 +        int i2863;
 89.2967 +        int i2864;
 89.2968 +        int i2865;
 89.2969 +        int i2866;
 89.2970 +        int i2867;
 89.2971 +        int i2868;
 89.2972 +        int i2869;
 89.2973 +        int i2870;
 89.2974 +        int i2871;
 89.2975 +        int i2872;
 89.2976 +        int i2873;
 89.2977 +        int i2874;
 89.2978 +        int i2875;
 89.2979 +        int i2876;
 89.2980 +        int i2877;
 89.2981 +        int i2878;
 89.2982 +        int i2879;
 89.2983 +        int i2880;
 89.2984 +        int i2881;
 89.2985 +        int i2882;
 89.2986 +        int i2883;
 89.2987 +        int i2884;
 89.2988 +        int i2885;
 89.2989 +        int i2886;
 89.2990 +        int i2887;
 89.2991 +        int i2888;
 89.2992 +        int i2889;
 89.2993 +        int i2890;
 89.2994 +        int i2891;
 89.2995 +        int i2892;
 89.2996 +        int i2893;
 89.2997 +        int i2894;
 89.2998 +        int i2895;
 89.2999 +        int i2896;
 89.3000 +        int i2897;
 89.3001 +        int i2898;
 89.3002 +        int i2899;
 89.3003 +        int i2900;
 89.3004 +        int i2901;
 89.3005 +        int i2902;
 89.3006 +        int i2903;
 89.3007 +        int i2904;
 89.3008 +        int i2905;
 89.3009 +        int i2906;
 89.3010 +        int i2907;
 89.3011 +        int i2908;
 89.3012 +        int i2909;
 89.3013 +        int i2910;
 89.3014 +        int i2911;
 89.3015 +        int i2912;
 89.3016 +        int i2913;
 89.3017 +        int i2914;
 89.3018 +        int i2915;
 89.3019 +        int i2916;
 89.3020 +        int i2917;
 89.3021 +        int i2918;
 89.3022 +        int i2919;
 89.3023 +        int i2920;
 89.3024 +        int i2921;
 89.3025 +        int i2922;
 89.3026 +        int i2923;
 89.3027 +        int i2924;
 89.3028 +        int i2925;
 89.3029 +        int i2926;
 89.3030 +        int i2927;
 89.3031 +        int i2928;
 89.3032 +        int i2929;
 89.3033 +        int i2930;
 89.3034 +        int i2931;
 89.3035 +        int i2932;
 89.3036 +        int i2933;
 89.3037 +        int i2934;
 89.3038 +        int i2935;
 89.3039 +        int i2936;
 89.3040 +        int i2937;
 89.3041 +        int i2938;
 89.3042 +        int i2939;
 89.3043 +        int i2940;
 89.3044 +        int i2941;
 89.3045 +        int i2942;
 89.3046 +        int i2943;
 89.3047 +        int i2944;
 89.3048 +        int i2945;
 89.3049 +        int i2946;
 89.3050 +        int i2947;
 89.3051 +        int i2948;
 89.3052 +        int i2949;
 89.3053 +        int i2950;
 89.3054 +        int i2951;
 89.3055 +        int i2952;
 89.3056 +        int i2953;
 89.3057 +        int i2954;
 89.3058 +        int i2955;
 89.3059 +        int i2956;
 89.3060 +        int i2957;
 89.3061 +        int i2958;
 89.3062 +        int i2959;
 89.3063 +        int i2960;
 89.3064 +        int i2961;
 89.3065 +        int i2962;
 89.3066 +        int i2963;
 89.3067 +        int i2964;
 89.3068 +        int i2965;
 89.3069 +        int i2966;
 89.3070 +        int i2967;
 89.3071 +        int i2968;
 89.3072 +        int i2969;
 89.3073 +        int i2970;
 89.3074 +        int i2971;
 89.3075 +        int i2972;
 89.3076 +        int i2973;
 89.3077 +        int i2974;
 89.3078 +        int i2975;
 89.3079 +        int i2976;
 89.3080 +        int i2977;
 89.3081 +        int i2978;
 89.3082 +        int i2979;
 89.3083 +        int i2980;
 89.3084 +        int i2981;
 89.3085 +        int i2982;
 89.3086 +        int i2983;
 89.3087 +        int i2984;
 89.3088 +        int i2985;
 89.3089 +        int i2986;
 89.3090 +        int i2987;
 89.3091 +        int i2988;
 89.3092 +        int i2989;
 89.3093 +        int i2990;
 89.3094 +        int i2991;
 89.3095 +        int i2992;
 89.3096 +        int i2993;
 89.3097 +        int i2994;
 89.3098 +        int i2995;
 89.3099 +        int i2996;
 89.3100 +        int i2997;
 89.3101 +        int i2998;
 89.3102 +        int i2999;
 89.3103 +        int i3000;
 89.3104 +        int i3001;
 89.3105 +        int i3002;
 89.3106 +        int i3003;
 89.3107 +        int i3004;
 89.3108 +        int i3005;
 89.3109 +        int i3006;
 89.3110 +        int i3007;
 89.3111 +        int i3008;
 89.3112 +        int i3009;
 89.3113 +        int i3010;
 89.3114 +        int i3011;
 89.3115 +        int i3012;
 89.3116 +        int i3013;
 89.3117 +        int i3014;
 89.3118 +        int i3015;
 89.3119 +        int i3016;
 89.3120 +        int i3017;
 89.3121 +        int i3018;
 89.3122 +        int i3019;
 89.3123 +        int i3020;
 89.3124 +        int i3021;
 89.3125 +        int i3022;
 89.3126 +        int i3023;
 89.3127 +        int i3024;
 89.3128 +        int i3025;
 89.3129 +        int i3026;
 89.3130 +        int i3027;
 89.3131 +        int i3028;
 89.3132 +        int i3029;
 89.3133 +        int i3030;
 89.3134 +        int i3031;
 89.3135 +        int i3032;
 89.3136 +        int i3033;
 89.3137 +        int i3034;
 89.3138 +        int i3035;
 89.3139 +        int i3036;
 89.3140 +        int i3037;
 89.3141 +        int i3038;
 89.3142 +        int i3039;
 89.3143 +        int i3040;
 89.3144 +        int i3041;
 89.3145 +        int i3042;
 89.3146 +        int i3043;
 89.3147 +        int i3044;
 89.3148 +        int i3045;
 89.3149 +        int i3046;
 89.3150 +        int i3047;
 89.3151 +        int i3048;
 89.3152 +        int i3049;
 89.3153 +        int i3050;
 89.3154 +        int i3051;
 89.3155 +        int i3052;
 89.3156 +        int i3053;
 89.3157 +        int i3054;
 89.3158 +        int i3055;
 89.3159 +        int i3056;
 89.3160 +        int i3057;
 89.3161 +        int i3058;
 89.3162 +        int i3059;
 89.3163 +        int i3060;
 89.3164 +        int i3061;
 89.3165 +        int i3062;
 89.3166 +        int i3063;
 89.3167 +        int i3064;
 89.3168 +        int i3065;
 89.3169 +        int i3066;
 89.3170 +        int i3067;
 89.3171 +        int i3068;
 89.3172 +        int i3069;
 89.3173 +        int i3070;
 89.3174 +        int i3071;
 89.3175 +        int i3072;
 89.3176 +        int i3073;
 89.3177 +        int i3074;
 89.3178 +        int i3075;
 89.3179 +        int i3076;
 89.3180 +        int i3077;
 89.3181 +        int i3078;
 89.3182 +        int i3079;
 89.3183 +        int i3080;
 89.3184 +        int i3081;
 89.3185 +        int i3082;
 89.3186 +        int i3083;
 89.3187 +        int i3084;
 89.3188 +        int i3085;
 89.3189 +        int i3086;
 89.3190 +        int i3087;
 89.3191 +        int i3088;
 89.3192 +        int i3089;
 89.3193 +        int i3090;
 89.3194 +        int i3091;
 89.3195 +        int i3092;
 89.3196 +        int i3093;
 89.3197 +        int i3094;
 89.3198 +        int i3095;
 89.3199 +        int i3096;
 89.3200 +        int i3097;
 89.3201 +        int i3098;
 89.3202 +        int i3099;
 89.3203 +        int i3100;
 89.3204 +        int i3101;
 89.3205 +        int i3102;
 89.3206 +        int i3103;
 89.3207 +        int i3104;
 89.3208 +        int i3105;
 89.3209 +        int i3106;
 89.3210 +        int i3107;
 89.3211 +        int i3108;
 89.3212 +        int i3109;
 89.3213 +        int i3110;
 89.3214 +        int i3111;
 89.3215 +        int i3112;
 89.3216 +        int i3113;
 89.3217 +        int i3114;
 89.3218 +        int i3115;
 89.3219 +        int i3116;
 89.3220 +        int i3117;
 89.3221 +        int i3118;
 89.3222 +        int i3119;
 89.3223 +        int i3120;
 89.3224 +        int i3121;
 89.3225 +        int i3122;
 89.3226 +        int i3123;
 89.3227 +        int i3124;
 89.3228 +        int i3125;
 89.3229 +        int i3126;
 89.3230 +        int i3127;
 89.3231 +        int i3128;
 89.3232 +        int i3129;
 89.3233 +        int i3130;
 89.3234 +        int i3131;
 89.3235 +        int i3132;
 89.3236 +        int i3133;
 89.3237 +        int i3134;
 89.3238 +        int i3135;
 89.3239 +        int i3136;
 89.3240 +        int i3137;
 89.3241 +        int i3138;
 89.3242 +        int i3139;
 89.3243 +        int i3140;
 89.3244 +        int i3141;
 89.3245 +        int i3142;
 89.3246 +        int i3143;
 89.3247 +        int i3144;
 89.3248 +        int i3145;
 89.3249 +        int i3146;
 89.3250 +        int i3147;
 89.3251 +        int i3148;
 89.3252 +        int i3149;
 89.3253 +        int i3150;
 89.3254 +        int i3151;
 89.3255 +        int i3152;
 89.3256 +        int i3153;
 89.3257 +        int i3154;
 89.3258 +        int i3155;
 89.3259 +        int i3156;
 89.3260 +        int i3157;
 89.3261 +        int i3158;
 89.3262 +        int i3159;
 89.3263 +        int i3160;
 89.3264 +        int i3161;
 89.3265 +        int i3162;
 89.3266 +        int i3163;
 89.3267 +        int i3164;
 89.3268 +        int i3165;
 89.3269 +        int i3166;
 89.3270 +        int i3167;
 89.3271 +        int i3168;
 89.3272 +        int i3169;
 89.3273 +        int i3170;
 89.3274 +        int i3171;
 89.3275 +        int i3172;
 89.3276 +        int i3173;
 89.3277 +        int i3174;
 89.3278 +        int i3175;
 89.3279 +        int i3176;
 89.3280 +        int i3177;
 89.3281 +        int i3178;
 89.3282 +        int i3179;
 89.3283 +        int i3180;
 89.3284 +        int i3181;
 89.3285 +        int i3182;
 89.3286 +        int i3183;
 89.3287 +        int i3184;
 89.3288 +        int i3185;
 89.3289 +        int i3186;
 89.3290 +        int i3187;
 89.3291 +        int i3188;
 89.3292 +        int i3189;
 89.3293 +        int i3190;
 89.3294 +        int i3191;
 89.3295 +        int i3192;
 89.3296 +        int i3193;
 89.3297 +        int i3194;
 89.3298 +        int i3195;
 89.3299 +        int i3196;
 89.3300 +        int i3197;
 89.3301 +        int i3198;
 89.3302 +        int i3199;
 89.3303 +        int i3200;
 89.3304 +        int i3201;
 89.3305 +        int i3202;
 89.3306 +        int i3203;
 89.3307 +        int i3204;
 89.3308 +        int i3205;
 89.3309 +        int i3206;
 89.3310 +        int i3207;
 89.3311 +        int i3208;
 89.3312 +        int i3209;
 89.3313 +        int i3210;
 89.3314 +        int i3211;
 89.3315 +        int i3212;
 89.3316 +        int i3213;
 89.3317 +        int i3214;
 89.3318 +        int i3215;
 89.3319 +        int i3216;
 89.3320 +        int i3217;
 89.3321 +        int i3218;
 89.3322 +        int i3219;
 89.3323 +        int i3220;
 89.3324 +        int i3221;
 89.3325 +        int i3222;
 89.3326 +        int i3223;
 89.3327 +        int i3224;
 89.3328 +        int i3225;
 89.3329 +        int i3226;
 89.3330 +        int i3227;
 89.3331 +        int i3228;
 89.3332 +        int i3229;
 89.3333 +        int i3230;
 89.3334 +        int i3231;
 89.3335 +        int i3232;
 89.3336 +        int i3233;
 89.3337 +        int i3234;
 89.3338 +        int i3235;
 89.3339 +        int i3236;
 89.3340 +        int i3237;
 89.3341 +        int i3238;
 89.3342 +        int i3239;
 89.3343 +        int i3240;
 89.3344 +        int i3241;
 89.3345 +        int i3242;
 89.3346 +        int i3243;
 89.3347 +        int i3244;
 89.3348 +        int i3245;
 89.3349 +        int i3246;
 89.3350 +        int i3247;
 89.3351 +        int i3248;
 89.3352 +        int i3249;
 89.3353 +        int i3250;
 89.3354 +        int i3251;
 89.3355 +        int i3252;
 89.3356 +        int i3253;
 89.3357 +        int i3254;
 89.3358 +        int i3255;
 89.3359 +        int i3256;
 89.3360 +        int i3257;
 89.3361 +        int i3258;
 89.3362 +        int i3259;
 89.3363 +        int i3260;
 89.3364 +        int i3261;
 89.3365 +        int i3262;
 89.3366 +        int i3263;
 89.3367 +        int i3264;
 89.3368 +        int i3265;
 89.3369 +        int i3266;
 89.3370 +        int i3267;
 89.3371 +        int i3268;
 89.3372 +        int i3269;
 89.3373 +        int i3270;
 89.3374 +        int i3271;
 89.3375 +        int i3272;
 89.3376 +        int i3273;
 89.3377 +        int i3274;
 89.3378 +        int i3275;
 89.3379 +        int i3276;
 89.3380 +        int i3277;
 89.3381 +        int i3278;
 89.3382 +        int i3279;
 89.3383 +        int i3280;
 89.3384 +        int i3281;
 89.3385 +        int i3282;
 89.3386 +        int i3283;
 89.3387 +        int i3284;
 89.3388 +        int i3285;
 89.3389 +        int i3286;
 89.3390 +        int i3287;
 89.3391 +        int i3288;
 89.3392 +        int i3289;
 89.3393 +        int i3290;
 89.3394 +        int i3291;
 89.3395 +        int i3292;
 89.3396 +        int i3293;
 89.3397 +        int i3294;
 89.3398 +        int i3295;
 89.3399 +        int i3296;
 89.3400 +        int i3297;
 89.3401 +        int i3298;
 89.3402 +        int i3299;
 89.3403 +        int i3300;
 89.3404 +        int i3301;
 89.3405 +        int i3302;
 89.3406 +        int i3303;
 89.3407 +        int i3304;
 89.3408 +        int i3305;
 89.3409 +        int i3306;
 89.3410 +        int i3307;
 89.3411 +        int i3308;
 89.3412 +        int i3309;
 89.3413 +        int i3310;
 89.3414 +        int i3311;
 89.3415 +        int i3312;
 89.3416 +        int i3313;
 89.3417 +        int i3314;
 89.3418 +        int i3315;
 89.3419 +        int i3316;
 89.3420 +        int i3317;
 89.3421 +        int i3318;
 89.3422 +        int i3319;
 89.3423 +        int i3320;
 89.3424 +        int i3321;
 89.3425 +        int i3322;
 89.3426 +        int i3323;
 89.3427 +        int i3324;
 89.3428 +        int i3325;
 89.3429 +        int i3326;
 89.3430 +        int i3327;
 89.3431 +        int i3328;
 89.3432 +        int i3329;
 89.3433 +        int i3330;
 89.3434 +        int i3331;
 89.3435 +        int i3332;
 89.3436 +        int i3333;
 89.3437 +        int i3334;
 89.3438 +        int i3335;
 89.3439 +        int i3336;
 89.3440 +        int i3337;
 89.3441 +        int i3338;
 89.3442 +        int i3339;
 89.3443 +        int i3340;
 89.3444 +        int i3341;
 89.3445 +        int i3342;
 89.3446 +        int i3343;
 89.3447 +        int i3344;
 89.3448 +        int i3345;
 89.3449 +        int i3346;
 89.3450 +        int i3347;
 89.3451 +        int i3348;
 89.3452 +        int i3349;
 89.3453 +        int i3350;
 89.3454 +        int i3351;
 89.3455 +        int i3352;
 89.3456 +        int i3353;
 89.3457 +        int i3354;
 89.3458 +        int i3355;
 89.3459 +        int i3356;
 89.3460 +        int i3357;
 89.3461 +        int i3358;
 89.3462 +        int i3359;
 89.3463 +        int i3360;
 89.3464 +        int i3361;
 89.3465 +        int i3362;
 89.3466 +        int i3363;
 89.3467 +        int i3364;
 89.3468 +        int i3365;
 89.3469 +        int i3366;
 89.3470 +        int i3367;
 89.3471 +        int i3368;
 89.3472 +        int i3369;
 89.3473 +        int i3370;
 89.3474 +        int i3371;
 89.3475 +        int i3372;
 89.3476 +        int i3373;
 89.3477 +        int i3374;
 89.3478 +        int i3375;
 89.3479 +        int i3376;
 89.3480 +        int i3377;
 89.3481 +        int i3378;
 89.3482 +        int i3379;
 89.3483 +        int i3380;
 89.3484 +        int i3381;
 89.3485 +        int i3382;
 89.3486 +        int i3383;
 89.3487 +        int i3384;
 89.3488 +        int i3385;
 89.3489 +        int i3386;
 89.3490 +        int i3387;
 89.3491 +        int i3388;
 89.3492 +        int i3389;
 89.3493 +        int i3390;
 89.3494 +        int i3391;
 89.3495 +        int i3392;
 89.3496 +        int i3393;
 89.3497 +        int i3394;
 89.3498 +        int i3395;
 89.3499 +        int i3396;
 89.3500 +        int i3397;
 89.3501 +        int i3398;
 89.3502 +        int i3399;
 89.3503 +        int i3400;
 89.3504 +        int i3401;
 89.3505 +        int i3402;
 89.3506 +        int i3403;
 89.3507 +        int i3404;
 89.3508 +        int i3405;
 89.3509 +        int i3406;
 89.3510 +        int i3407;
 89.3511 +        int i3408;
 89.3512 +        int i3409;
 89.3513 +        int i3410;
 89.3514 +        int i3411;
 89.3515 +        int i3412;
 89.3516 +        int i3413;
 89.3517 +        int i3414;
 89.3518 +        int i3415;
 89.3519 +        int i3416;
 89.3520 +        int i3417;
 89.3521 +        int i3418;
 89.3522 +        int i3419;
 89.3523 +        int i3420;
 89.3524 +        int i3421;
 89.3525 +        int i3422;
 89.3526 +        int i3423;
 89.3527 +        int i3424;
 89.3528 +        int i3425;
 89.3529 +        int i3426;
 89.3530 +        int i3427;
 89.3531 +        int i3428;
 89.3532 +        int i3429;
 89.3533 +        int i3430;
 89.3534 +        int i3431;
 89.3535 +        int i3432;
 89.3536 +        int i3433;
 89.3537 +        int i3434;
 89.3538 +        int i3435;
 89.3539 +        int i3436;
 89.3540 +        int i3437;
 89.3541 +        int i3438;
 89.3542 +        int i3439;
 89.3543 +        int i3440;
 89.3544 +        int i3441;
 89.3545 +        int i3442;
 89.3546 +        int i3443;
 89.3547 +        int i3444;
 89.3548 +        int i3445;
 89.3549 +        int i3446;
 89.3550 +        int i3447;
 89.3551 +        int i3448;
 89.3552 +        int i3449;
 89.3553 +        int i3450;
 89.3554 +        int i3451;
 89.3555 +        int i3452;
 89.3556 +        int i3453;
 89.3557 +        int i3454;
 89.3558 +        int i3455;
 89.3559 +        int i3456;
 89.3560 +        int i3457;
 89.3561 +        int i3458;
 89.3562 +        int i3459;
 89.3563 +        int i3460;
 89.3564 +        int i3461;
 89.3565 +        int i3462;
 89.3566 +        int i3463;
 89.3567 +        int i3464;
 89.3568 +        int i3465;
 89.3569 +        int i3466;
 89.3570 +        int i3467;
 89.3571 +        int i3468;
 89.3572 +        int i3469;
 89.3573 +        int i3470;
 89.3574 +        int i3471;
 89.3575 +        int i3472;
 89.3576 +        int i3473;
 89.3577 +        int i3474;
 89.3578 +        int i3475;
 89.3579 +        int i3476;
 89.3580 +        int i3477;
 89.3581 +        int i3478;
 89.3582 +        int i3479;
 89.3583 +        int i3480;
 89.3584 +        int i3481;
 89.3585 +        int i3482;
 89.3586 +        int i3483;
 89.3587 +        int i3484;
 89.3588 +        int i3485;
 89.3589 +        int i3486;
 89.3590 +        int i3487;
 89.3591 +        int i3488;
 89.3592 +        int i3489;
 89.3593 +        int i3490;
 89.3594 +        int i3491;
 89.3595 +        int i3492;
 89.3596 +        int i3493;
 89.3597 +        int i3494;
 89.3598 +        int i3495;
 89.3599 +        int i3496;
 89.3600 +        int i3497;
 89.3601 +        int i3498;
 89.3602 +        int i3499;
 89.3603 +        int i3500;
 89.3604 +        int i3501;
 89.3605 +        int i3502;
 89.3606 +        int i3503;
 89.3607 +        int i3504;
 89.3608 +        int i3505;
 89.3609 +        int i3506;
 89.3610 +        int i3507;
 89.3611 +        int i3508;
 89.3612 +        int i3509;
 89.3613 +        int i3510;
 89.3614 +        int i3511;
 89.3615 +        int i3512;
 89.3616 +        int i3513;
 89.3617 +        int i3514;
 89.3618 +        int i3515;
 89.3619 +        int i3516;
 89.3620 +        int i3517;
 89.3621 +        int i3518;
 89.3622 +        int i3519;
 89.3623 +        int i3520;
 89.3624 +        int i3521;
 89.3625 +        int i3522;
 89.3626 +        int i3523;
 89.3627 +        int i3524;
 89.3628 +        int i3525;
 89.3629 +        int i3526;
 89.3630 +        int i3527;
 89.3631 +        int i3528;
 89.3632 +        int i3529;
 89.3633 +        int i3530;
 89.3634 +        int i3531;
 89.3635 +        int i3532;
 89.3636 +        int i3533;
 89.3637 +        int i3534;
 89.3638 +        int i3535;
 89.3639 +        int i3536;
 89.3640 +        int i3537;
 89.3641 +        int i3538;
 89.3642 +        int i3539;
 89.3643 +        int i3540;
 89.3644 +        int i3541;
 89.3645 +        int i3542;
 89.3646 +        int i3543;
 89.3647 +        int i3544;
 89.3648 +        int i3545;
 89.3649 +        int i3546;
 89.3650 +        int i3547;
 89.3651 +        int i3548;
 89.3652 +        int i3549;
 89.3653 +        int i3550;
 89.3654 +        int i3551;
 89.3655 +        int i3552;
 89.3656 +        int i3553;
 89.3657 +        int i3554;
 89.3658 +        int i3555;
 89.3659 +        int i3556;
 89.3660 +        int i3557;
 89.3661 +        int i3558;
 89.3662 +        int i3559;
 89.3663 +        int i3560;
 89.3664 +        int i3561;
 89.3665 +        int i3562;
 89.3666 +        int i3563;
 89.3667 +        int i3564;
 89.3668 +        int i3565;
 89.3669 +        int i3566;
 89.3670 +        int i3567;
 89.3671 +        int i3568;
 89.3672 +        int i3569;
 89.3673 +        int i3570;
 89.3674 +        int i3571;
 89.3675 +        int i3572;
 89.3676 +        int i3573;
 89.3677 +        int i3574;
 89.3678 +        int i3575;
 89.3679 +        int i3576;
 89.3680 +        int i3577;
 89.3681 +        int i3578;
 89.3682 +        int i3579;
 89.3683 +        int i3580;
 89.3684 +        int i3581;
 89.3685 +        int i3582;
 89.3686 +        int i3583;
 89.3687 +        int i3584;
 89.3688 +        int i3585;
 89.3689 +        int i3586;
 89.3690 +        int i3587;
 89.3691 +        int i3588;
 89.3692 +        int i3589;
 89.3693 +        int i3590;
 89.3694 +        int i3591;
 89.3695 +        int i3592;
 89.3696 +        int i3593;
 89.3697 +        int i3594;
 89.3698 +        int i3595;
 89.3699 +        int i3596;
 89.3700 +        int i3597;
 89.3701 +        int i3598;
 89.3702 +        int i3599;
 89.3703 +        int i3600;
 89.3704 +        int i3601;
 89.3705 +        int i3602;
 89.3706 +        int i3603;
 89.3707 +        int i3604;
 89.3708 +        int i3605;
 89.3709 +        int i3606;
 89.3710 +        int i3607;
 89.3711 +        int i3608;
 89.3712 +        int i3609;
 89.3713 +        int i3610;
 89.3714 +        int i3611;
 89.3715 +        int i3612;
 89.3716 +        int i3613;
 89.3717 +        int i3614;
 89.3718 +        int i3615;
 89.3719 +        int i3616;
 89.3720 +        int i3617;
 89.3721 +        int i3618;
 89.3722 +        int i3619;
 89.3723 +        int i3620;
 89.3724 +        int i3621;
 89.3725 +        int i3622;
 89.3726 +        int i3623;
 89.3727 +        int i3624;
 89.3728 +        int i3625;
 89.3729 +        int i3626;
 89.3730 +        int i3627;
 89.3731 +        int i3628;
 89.3732 +        int i3629;
 89.3733 +        int i3630;
 89.3734 +        int i3631;
 89.3735 +        int i3632;
 89.3736 +        int i3633;
 89.3737 +        int i3634;
 89.3738 +        int i3635;
 89.3739 +        int i3636;
 89.3740 +        int i3637;
 89.3741 +        int i3638;
 89.3742 +        int i3639;
 89.3743 +        int i3640;
 89.3744 +        int i3641;
 89.3745 +        int i3642;
 89.3746 +        int i3643;
 89.3747 +        int i3644;
 89.3748 +        int i3645;
 89.3749 +        int i3646;
 89.3750 +        int i3647;
 89.3751 +        int i3648;
 89.3752 +        int i3649;
 89.3753 +        int i3650;
 89.3754 +        int i3651;
 89.3755 +        int i3652;
 89.3756 +        int i3653;
 89.3757 +        int i3654;
 89.3758 +        int i3655;
 89.3759 +        int i3656;
 89.3760 +        int i3657;
 89.3761 +        int i3658;
 89.3762 +        int i3659;
 89.3763 +        int i3660;
 89.3764 +        int i3661;
 89.3765 +        int i3662;
 89.3766 +        int i3663;
 89.3767 +        int i3664;
 89.3768 +        int i3665;
 89.3769 +        int i3666;
 89.3770 +        int i3667;
 89.3771 +        int i3668;
 89.3772 +        int i3669;
 89.3773 +        int i3670;
 89.3774 +        int i3671;
 89.3775 +        int i3672;
 89.3776 +        int i3673;
 89.3777 +        int i3674;
 89.3778 +        int i3675;
 89.3779 +        int i3676;
 89.3780 +        int i3677;
 89.3781 +        int i3678;
 89.3782 +        int i3679;
 89.3783 +        int i3680;
 89.3784 +        int i3681;
 89.3785 +        int i3682;
 89.3786 +        int i3683;
 89.3787 +        int i3684;
 89.3788 +        int i3685;
 89.3789 +        int i3686;
 89.3790 +        int i3687;
 89.3791 +        int i3688;
 89.3792 +        int i3689;
 89.3793 +        int i3690;
 89.3794 +        int i3691;
 89.3795 +        int i3692;
 89.3796 +        int i3693;
 89.3797 +        int i3694;
 89.3798 +        int i3695;
 89.3799 +        int i3696;
 89.3800 +        int i3697;
 89.3801 +        int i3698;
 89.3802 +        int i3699;
 89.3803 +        int i3700;
 89.3804 +        int i3701;
 89.3805 +        int i3702;
 89.3806 +        int i3703;
 89.3807 +        int i3704;
 89.3808 +        int i3705;
 89.3809 +        int i3706;
 89.3810 +        int i3707;
 89.3811 +        int i3708;
 89.3812 +        int i3709;
 89.3813 +        int i3710;
 89.3814 +        int i3711;
 89.3815 +        int i3712;
 89.3816 +        int i3713;
 89.3817 +        int i3714;
 89.3818 +        int i3715;
 89.3819 +        int i3716;
 89.3820 +        int i3717;
 89.3821 +        int i3718;
 89.3822 +        int i3719;
 89.3823 +        int i3720;
 89.3824 +        int i3721;
 89.3825 +        int i3722;
 89.3826 +        int i3723;
 89.3827 +        int i3724;
 89.3828 +        int i3725;
 89.3829 +        int i3726;
 89.3830 +        int i3727;
 89.3831 +        int i3728;
 89.3832 +        int i3729;
 89.3833 +        int i3730;
 89.3834 +        int i3731;
 89.3835 +        int i3732;
 89.3836 +        int i3733;
 89.3837 +        int i3734;
 89.3838 +        int i3735;
 89.3839 +        int i3736;
 89.3840 +        int i3737;
 89.3841 +        int i3738;
 89.3842 +        int i3739;
 89.3843 +        int i3740;
 89.3844 +        int i3741;
 89.3845 +        int i3742;
 89.3846 +        int i3743;
 89.3847 +        int i3744;
 89.3848 +        int i3745;
 89.3849 +        int i3746;
 89.3850 +        int i3747;
 89.3851 +        int i3748;
 89.3852 +        int i3749;
 89.3853 +        int i3750;
 89.3854 +        int i3751;
 89.3855 +        int i3752;
 89.3856 +        int i3753;
 89.3857 +        int i3754;
 89.3858 +        int i3755;
 89.3859 +        int i3756;
 89.3860 +        int i3757;
 89.3861 +        int i3758;
 89.3862 +        int i3759;
 89.3863 +        int i3760;
 89.3864 +        int i3761;
 89.3865 +        int i3762;
 89.3866 +        int i3763;
 89.3867 +        int i3764;
 89.3868 +        int i3765;
 89.3869 +        int i3766;
 89.3870 +        int i3767;
 89.3871 +        int i3768;
 89.3872 +        int i3769;
 89.3873 +        int i3770;
 89.3874 +        int i3771;
 89.3875 +        int i3772;
 89.3876 +        int i3773;
 89.3877 +        int i3774;
 89.3878 +        int i3775;
 89.3879 +        int i3776;
 89.3880 +        int i3777;
 89.3881 +        int i3778;
 89.3882 +        int i3779;
 89.3883 +        int i3780;
 89.3884 +        int i3781;
 89.3885 +        int i3782;
 89.3886 +        int i3783;
 89.3887 +        int i3784;
 89.3888 +        int i3785;
 89.3889 +        int i3786;
 89.3890 +        int i3787;
 89.3891 +        int i3788;
 89.3892 +        int i3789;
 89.3893 +        int i3790;
 89.3894 +        int i3791;
 89.3895 +        int i3792;
 89.3896 +        int i3793;
 89.3897 +        int i3794;
 89.3898 +        int i3795;
 89.3899 +        int i3796;
 89.3900 +        int i3797;
 89.3901 +        int i3798;
 89.3902 +        int i3799;
 89.3903 +        int i3800;
 89.3904 +        int i3801;
 89.3905 +        int i3802;
 89.3906 +        int i3803;
 89.3907 +        int i3804;
 89.3908 +        int i3805;
 89.3909 +        int i3806;
 89.3910 +        int i3807;
 89.3911 +        int i3808;
 89.3912 +        int i3809;
 89.3913 +        int i3810;
 89.3914 +        int i3811;
 89.3915 +        int i3812;
 89.3916 +        int i3813;
 89.3917 +        int i3814;
 89.3918 +        int i3815;
 89.3919 +        int i3816;
 89.3920 +        int i3817;
 89.3921 +        int i3818;
 89.3922 +        int i3819;
 89.3923 +        int i3820;
 89.3924 +        int i3821;
 89.3925 +        int i3822;
 89.3926 +        int i3823;
 89.3927 +        int i3824;
 89.3928 +        int i3825;
 89.3929 +        int i3826;
 89.3930 +        int i3827;
 89.3931 +        int i3828;
 89.3932 +        int i3829;
 89.3933 +        int i3830;
 89.3934 +        int i3831;
 89.3935 +        int i3832;
 89.3936 +        int i3833;
 89.3937 +        int i3834;
 89.3938 +        int i3835;
 89.3939 +        int i3836;
 89.3940 +        int i3837;
 89.3941 +        int i3838;
 89.3942 +        int i3839;
 89.3943 +        int i3840;
 89.3944 +        int i3841;
 89.3945 +        int i3842;
 89.3946 +        int i3843;
 89.3947 +        int i3844;
 89.3948 +        int i3845;
 89.3949 +        int i3846;
 89.3950 +        int i3847;
 89.3951 +        int i3848;
 89.3952 +        int i3849;
 89.3953 +        int i3850;
 89.3954 +        int i3851;
 89.3955 +        int i3852;
 89.3956 +        int i3853;
 89.3957 +        int i3854;
 89.3958 +        int i3855;
 89.3959 +        int i3856;
 89.3960 +        int i3857;
 89.3961 +        int i3858;
 89.3962 +        int i3859;
 89.3963 +        int i3860;
 89.3964 +        int i3861;
 89.3965 +        int i3862;
 89.3966 +        int i3863;
 89.3967 +        int i3864;
 89.3968 +        int i3865;
 89.3969 +        int i3866;
 89.3970 +        int i3867;
 89.3971 +        int i3868;
 89.3972 +        int i3869;
 89.3973 +        int i3870;
 89.3974 +        int i3871;
 89.3975 +        int i3872;
 89.3976 +        int i3873;
 89.3977 +        int i3874;
 89.3978 +        int i3875;
 89.3979 +        int i3876;
 89.3980 +        int i3877;
 89.3981 +        int i3878;
 89.3982 +        int i3879;
 89.3983 +        int i3880;
 89.3984 +        int i3881;
 89.3985 +        int i3882;
 89.3986 +        int i3883;
 89.3987 +        int i3884;
 89.3988 +        int i3885;
 89.3989 +        int i3886;
 89.3990 +        int i3887;
 89.3991 +        int i3888;
 89.3992 +        int i3889;
 89.3993 +        int i3890;
 89.3994 +        int i3891;
 89.3995 +        int i3892;
 89.3996 +        int i3893;
 89.3997 +        int i3894;
 89.3998 +        int i3895;
 89.3999 +        int i3896;
 89.4000 +        int i3897;
 89.4001 +        int i3898;
 89.4002 +        int i3899;
 89.4003 +        int i3900;
 89.4004 +        int i3901;
 89.4005 +        int i3902;
 89.4006 +        int i3903;
 89.4007 +        int i3904;
 89.4008 +        int i3905;
 89.4009 +        int i3906;
 89.4010 +        int i3907;
 89.4011 +        int i3908;
 89.4012 +        int i3909;
 89.4013 +        int i3910;
 89.4014 +        int i3911;
 89.4015 +        int i3912;
 89.4016 +        int i3913;
 89.4017 +        int i3914;
 89.4018 +        int i3915;
 89.4019 +        int i3916;
 89.4020 +        int i3917;
 89.4021 +        int i3918;
 89.4022 +        int i3919;
 89.4023 +        int i3920;
 89.4024 +        int i3921;
 89.4025 +        int i3922;
 89.4026 +        int i3923;
 89.4027 +        int i3924;
 89.4028 +        int i3925;
 89.4029 +        int i3926;
 89.4030 +        int i3927;
 89.4031 +        int i3928;
 89.4032 +        int i3929;
 89.4033 +        int i3930;
 89.4034 +        int i3931;
 89.4035 +        int i3932;
 89.4036 +        int i3933;
 89.4037 +        int i3934;
 89.4038 +        int i3935;
 89.4039 +        int i3936;
 89.4040 +        int i3937;
 89.4041 +        int i3938;
 89.4042 +        int i3939;
 89.4043 +        int i3940;
 89.4044 +        int i3941;
 89.4045 +        int i3942;
 89.4046 +        int i3943;
 89.4047 +        int i3944;
 89.4048 +        int i3945;
 89.4049 +        int i3946;
 89.4050 +        int i3947;
 89.4051 +        int i3948;
 89.4052 +        int i3949;
 89.4053 +        int i3950;
 89.4054 +        int i3951;
 89.4055 +        int i3952;
 89.4056 +        int i3953;
 89.4057 +        int i3954;
 89.4058 +        int i3955;
 89.4059 +        int i3956;
 89.4060 +        int i3957;
 89.4061 +        int i3958;
 89.4062 +        int i3959;
 89.4063 +        int i3960;
 89.4064 +        int i3961;
 89.4065 +        int i3962;
 89.4066 +        int i3963;
 89.4067 +        int i3964;
 89.4068 +        int i3965;
 89.4069 +        int i3966;
 89.4070 +        int i3967;
 89.4071 +        int i3968;
 89.4072 +        int i3969;
 89.4073 +        int i3970;
 89.4074 +        int i3971;
 89.4075 +        int i3972;
 89.4076 +        int i3973;
 89.4077 +        int i3974;
 89.4078 +        int i3975;
 89.4079 +        int i3976;
 89.4080 +        int i3977;
 89.4081 +        int i3978;
 89.4082 +        int i3979;
 89.4083 +        int i3980;
 89.4084 +        int i3981;
 89.4085 +        int i3982;
 89.4086 +        int i3983;
 89.4087 +        int i3984;
 89.4088 +        int i3985;
 89.4089 +        int i3986;
 89.4090 +        int i3987;
 89.4091 +        int i3988;
 89.4092 +        int i3989;
 89.4093 +        int i3990;
 89.4094 +        int i3991;
 89.4095 +        int i3992;
 89.4096 +        int i3993;
 89.4097 +        int i3994;
 89.4098 +        int i3995;
 89.4099 +        int i3996;
 89.4100 +        int i3997;
 89.4101 +        int i3998;
 89.4102 +        int i3999;
 89.4103 +        int i4000;
 89.4104 +        int i4001;
 89.4105 +        int i4002;
 89.4106 +        int i4003;
 89.4107 +        int i4004;
 89.4108 +        int i4005;
 89.4109 +        int i4006;
 89.4110 +        int i4007;
 89.4111 +        int i4008;
 89.4112 +        int i4009;
 89.4113 +        int i4010;
 89.4114 +        int i4011;
 89.4115 +        int i4012;
 89.4116 +        int i4013;
 89.4117 +        int i4014;
 89.4118 +        int i4015;
 89.4119 +        int i4016;
 89.4120 +        int i4017;
 89.4121 +        int i4018;
 89.4122 +        int i4019;
 89.4123 +        int i4020;
 89.4124 +        int i4021;
 89.4125 +        int i4022;
 89.4126 +        int i4023;
 89.4127 +        int i4024;
 89.4128 +        int i4025;
 89.4129 +        int i4026;
 89.4130 +        int i4027;
 89.4131 +        int i4028;
 89.4132 +        int i4029;
 89.4133 +        int i4030;
 89.4134 +        int i4031;
 89.4135 +        int i4032;
 89.4136 +        int i4033;
 89.4137 +        int i4034;
 89.4138 +        int i4035;
 89.4139 +        int i4036;
 89.4140 +        int i4037;
 89.4141 +        int i4038;
 89.4142 +        int i4039;
 89.4143 +        int i4040;
 89.4144 +        int i4041;
 89.4145 +        int i4042;
 89.4146 +        int i4043;
 89.4147 +        int i4044;
 89.4148 +        int i4045;
 89.4149 +        int i4046;
 89.4150 +        int i4047;
 89.4151 +        int i4048;
 89.4152 +        int i4049;
 89.4153 +        int i4050;
 89.4154 +        int i4051;
 89.4155 +        int i4052;
 89.4156 +        int i4053;
 89.4157 +        int i4054;
 89.4158 +        int i4055;
 89.4159 +        int i4056;
 89.4160 +        int i4057;
 89.4161 +        int i4058;
 89.4162 +        int i4059;
 89.4163 +        int i4060;
 89.4164 +        int i4061;
 89.4165 +        int i4062;
 89.4166 +        int i4063;
 89.4167 +        int i4064;
 89.4168 +        int i4065;
 89.4169 +        int i4066;
 89.4170 +        int i4067;
 89.4171 +        int i4068;
 89.4172 +        int i4069;
 89.4173 +        int i4070;
 89.4174 +        int i4071;
 89.4175 +        int i4072;
 89.4176 +        int i4073;
 89.4177 +        int i4074;
 89.4178 +        int i4075;
 89.4179 +        int i4076;
 89.4180 +        int i4077;
 89.4181 +        int i4078;
 89.4182 +        int i4079;
 89.4183 +        int i4080;
 89.4184 +        int i4081;
 89.4185 +        int i4082;
 89.4186 +        int i4083;
 89.4187 +        int i4084;
 89.4188 +        int i4085;
 89.4189 +        int i4086;
 89.4190 +        int i4087;
 89.4191 +        int i4088;
 89.4192 +        int i4089;
 89.4193 +        int i4090;
 89.4194 +        int i4091;
 89.4195 +        int i4092;
 89.4196 +        int i4093;
 89.4197 +        int i4094;
 89.4198 +        int i4095;
 89.4199 +        int i4096;
 89.4200 +        int i4097;
 89.4201 +        int i4098;
 89.4202 +        int i4099;
 89.4203 +        int i4100;
 89.4204 +        int i4101;
 89.4205 +        int i4102;
 89.4206 +        int i4103;
 89.4207 +        int i4104;
 89.4208 +        int i4105;
 89.4209 +        int i4106;
 89.4210 +        int i4107;
 89.4211 +        int i4108;
 89.4212 +        int i4109;
 89.4213 +        int i4110;
 89.4214 +        int i4111;
 89.4215 +        int i4112;
 89.4216 +        int i4113;
 89.4217 +        int i4114;
 89.4218 +        int i4115;
 89.4219 +        int i4116;
 89.4220 +        int i4117;
 89.4221 +        int i4118;
 89.4222 +        int i4119;
 89.4223 +        int i4120;
 89.4224 +        int i4121;
 89.4225 +        int i4122;
 89.4226 +        int i4123;
 89.4227 +        int i4124;
 89.4228 +        int i4125;
 89.4229 +        int i4126;
 89.4230 +        int i4127;
 89.4231 +        int i4128;
 89.4232 +        int i4129;
 89.4233 +        int i4130;
 89.4234 +        int i4131;
 89.4235 +        int i4132;
 89.4236 +        int i4133;
 89.4237 +        int i4134;
 89.4238 +        int i4135;
 89.4239 +        int i4136;
 89.4240 +        int i4137;
 89.4241 +        int i4138;
 89.4242 +        int i4139;
 89.4243 +        int i4140;
 89.4244 +        int i4141;
 89.4245 +        int i4142;
 89.4246 +        int i4143;
 89.4247 +        int i4144;
 89.4248 +        int i4145;
 89.4249 +        int i4146;
 89.4250 +        int i4147;
 89.4251 +        int i4148;
 89.4252 +        int i4149;
 89.4253 +        int i4150;
 89.4254 +        int i4151;
 89.4255 +        int i4152;
 89.4256 +        int i4153;
 89.4257 +        int i4154;
 89.4258 +        int i4155;
 89.4259 +        int i4156;
 89.4260 +        int i4157;
 89.4261 +        int i4158;
 89.4262 +        int i4159;
 89.4263 +        int i4160;
 89.4264 +        int i4161;
 89.4265 +        int i4162;
 89.4266 +        int i4163;
 89.4267 +        int i4164;
 89.4268 +        int i4165;
 89.4269 +        int i4166;
 89.4270 +        int i4167;
 89.4271 +        int i4168;
 89.4272 +        int i4169;
 89.4273 +        int i4170;
 89.4274 +        int i4171;
 89.4275 +        int i4172;
 89.4276 +        int i4173;
 89.4277 +        int i4174;
 89.4278 +        int i4175;
 89.4279 +        int i4176;
 89.4280 +        int i4177;
 89.4281 +        int i4178;
 89.4282 +        int i4179;
 89.4283 +        int i4180;
 89.4284 +        int i4181;
 89.4285 +        int i4182;
 89.4286 +        int i4183;
 89.4287 +        int i4184;
 89.4288 +        int i4185;
 89.4289 +        int i4186;
 89.4290 +        int i4187;
 89.4291 +        int i4188;
 89.4292 +        int i4189;
 89.4293 +        int i4190;
 89.4294 +        int i4191;
 89.4295 +        int i4192;
 89.4296 +        int i4193;
 89.4297 +        int i4194;
 89.4298 +        int i4195;
 89.4299 +        int i4196;
 89.4300 +        int i4197;
 89.4301 +        int i4198;
 89.4302 +        int i4199;
 89.4303 +        int i4200;
 89.4304 +        int i4201;
 89.4305 +        int i4202;
 89.4306 +        int i4203;
 89.4307 +        int i4204;
 89.4308 +        int i4205;
 89.4309 +        int i4206;
 89.4310 +        int i4207;
 89.4311 +        int i4208;
 89.4312 +        int i4209;
 89.4313 +        int i4210;
 89.4314 +        int i4211;
 89.4315 +        int i4212;
 89.4316 +        int i4213;
 89.4317 +        int i4214;
 89.4318 +        int i4215;
 89.4319 +        int i4216;
 89.4320 +        int i4217;
 89.4321 +        int i4218;
 89.4322 +        int i4219;
 89.4323 +        int i4220;
 89.4324 +        int i4221;
 89.4325 +        int i4222;
 89.4326 +        int i4223;
 89.4327 +        int i4224;
 89.4328 +        int i4225;
 89.4329 +        int i4226;
 89.4330 +        int i4227;
 89.4331 +        int i4228;
 89.4332 +        int i4229;
 89.4333 +        int i4230;
 89.4334 +        int i4231;
 89.4335 +        int i4232;
 89.4336 +        int i4233;
 89.4337 +        int i4234;
 89.4338 +        int i4235;
 89.4339 +        int i4236;
 89.4340 +        int i4237;
 89.4341 +        int i4238;
 89.4342 +        int i4239;
 89.4343 +        int i4240;
 89.4344 +        int i4241;
 89.4345 +        int i4242;
 89.4346 +        int i4243;
 89.4347 +        int i4244;
 89.4348 +        int i4245;
 89.4349 +        int i4246;
 89.4350 +        int i4247;
 89.4351 +        int i4248;
 89.4352 +        int i4249;
 89.4353 +        int i4250;
 89.4354 +        int i4251;
 89.4355 +        int i4252;
 89.4356 +        int i4253;
 89.4357 +        int i4254;
 89.4358 +        int i4255;
 89.4359 +        int i4256;
 89.4360 +        int i4257;
 89.4361 +        int i4258;
 89.4362 +        int i4259;
 89.4363 +        int i4260;
 89.4364 +        int i4261;
 89.4365 +        int i4262;
 89.4366 +        int i4263;
 89.4367 +        int i4264;
 89.4368 +        int i4265;
 89.4369 +        int i4266;
 89.4370 +        int i4267;
 89.4371 +        int i4268;
 89.4372 +        int i4269;
 89.4373 +        int i4270;
 89.4374 +        int i4271;
 89.4375 +        int i4272;
 89.4376 +        int i4273;
 89.4377 +        int i4274;
 89.4378 +        int i4275;
 89.4379 +        int i4276;
 89.4380 +        int i4277;
 89.4381 +        int i4278;
 89.4382 +        int i4279;
 89.4383 +        int i4280;
 89.4384 +        int i4281;
 89.4385 +        int i4282;
 89.4386 +        int i4283;
 89.4387 +        int i4284;
 89.4388 +        int i4285;
 89.4389 +        int i4286;
 89.4390 +        int i4287;
 89.4391 +        int i4288;
 89.4392 +        int i4289;
 89.4393 +        int i4290;
 89.4394 +        int i4291;
 89.4395 +        int i4292;
 89.4396 +        int i4293;
 89.4397 +        int i4294;
 89.4398 +        int i4295;
 89.4399 +        int i4296;
 89.4400 +        int i4297;
 89.4401 +        int i4298;
 89.4402 +        int i4299;
 89.4403 +        int i4300;
 89.4404 +        int i4301;
 89.4405 +        int i4302;
 89.4406 +        int i4303;
 89.4407 +        int i4304;
 89.4408 +        int i4305;
 89.4409 +        int i4306;
 89.4410 +        int i4307;
 89.4411 +        int i4308;
 89.4412 +        int i4309;
 89.4413 +        int i4310;
 89.4414 +        int i4311;
 89.4415 +        int i4312;
 89.4416 +        int i4313;
 89.4417 +        int i4314;
 89.4418 +        int i4315;
 89.4419 +        int i4316;
 89.4420 +        int i4317;
 89.4421 +        int i4318;
 89.4422 +        int i4319;
 89.4423 +        int i4320;
 89.4424 +        int i4321;
 89.4425 +        int i4322;
 89.4426 +        int i4323;
 89.4427 +        int i4324;
 89.4428 +        int i4325;
 89.4429 +        int i4326;
 89.4430 +        int i4327;
 89.4431 +        int i4328;
 89.4432 +        int i4329;
 89.4433 +        int i4330;
 89.4434 +        int i4331;
 89.4435 +        int i4332;
 89.4436 +        int i4333;
 89.4437 +        int i4334;
 89.4438 +        int i4335;
 89.4439 +        int i4336;
 89.4440 +        int i4337;
 89.4441 +        int i4338;
 89.4442 +        int i4339;
 89.4443 +        int i4340;
 89.4444 +        int i4341;
 89.4445 +        int i4342;
 89.4446 +        int i4343;
 89.4447 +        int i4344;
 89.4448 +        int i4345;
 89.4449 +        int i4346;
 89.4450 +        int i4347;
 89.4451 +        int i4348;
 89.4452 +        int i4349;
 89.4453 +        int i4350;
 89.4454 +        int i4351;
 89.4455 +        int i4352;
 89.4456 +        int i4353;
 89.4457 +        int i4354;
 89.4458 +        int i4355;
 89.4459 +        int i4356;
 89.4460 +        int i4357;
 89.4461 +        int i4358;
 89.4462 +        int i4359;
 89.4463 +        int i4360;
 89.4464 +        int i4361;
 89.4465 +        int i4362;
 89.4466 +        int i4363;
 89.4467 +        int i4364;
 89.4468 +        int i4365;
 89.4469 +        int i4366;
 89.4470 +        int i4367;
 89.4471 +        int i4368;
 89.4472 +        int i4369;
 89.4473 +        int i4370;
 89.4474 +        int i4371;
 89.4475 +        int i4372;
 89.4476 +        int i4373;
 89.4477 +        int i4374;
 89.4478 +        int i4375;
 89.4479 +        int i4376;
 89.4480 +        int i4377;
 89.4481 +        int i4378;
 89.4482 +        int i4379;
 89.4483 +        int i4380;
 89.4484 +        int i4381;
 89.4485 +        int i4382;
 89.4486 +        int i4383;
 89.4487 +        int i4384;
 89.4488 +        int i4385;
 89.4489 +        int i4386;
 89.4490 +        int i4387;
 89.4491 +        int i4388;
 89.4492 +        int i4389;
 89.4493 +        int i4390;
 89.4494 +        int i4391;
 89.4495 +        int i4392;
 89.4496 +        int i4393;
 89.4497 +        int i4394;
 89.4498 +        int i4395;
 89.4499 +        int i4396;
 89.4500 +        int i4397;
 89.4501 +        int i4398;
 89.4502 +        int i4399;
 89.4503 +        int i4400;
 89.4504 +        int i4401;
 89.4505 +        int i4402;
 89.4506 +        int i4403;
 89.4507 +        int i4404;
 89.4508 +        int i4405;
 89.4509 +        int i4406;
 89.4510 +        int i4407;
 89.4511 +        int i4408;
 89.4512 +        int i4409;
 89.4513 +        int i4410;
 89.4514 +        int i4411;
 89.4515 +        int i4412;
 89.4516 +        int i4413;
 89.4517 +        int i4414;
 89.4518 +        int i4415;
 89.4519 +        int i4416;
 89.4520 +        int i4417;
 89.4521 +        int i4418;
 89.4522 +        int i4419;
 89.4523 +        int i4420;
 89.4524 +        int i4421;
 89.4525 +        int i4422;
 89.4526 +        int i4423;
 89.4527 +        int i4424;
 89.4528 +        int i4425;
 89.4529 +        int i4426;
 89.4530 +        int i4427;
 89.4531 +        int i4428;
 89.4532 +        int i4429;
 89.4533 +        int i4430;
 89.4534 +        int i4431;
 89.4535 +        int i4432;
 89.4536 +        int i4433;
 89.4537 +        int i4434;
 89.4538 +        int i4435;
 89.4539 +        int i4436;
 89.4540 +        int i4437;
 89.4541 +        int i4438;
 89.4542 +        int i4439;
 89.4543 +        int i4440;
 89.4544 +        int i4441;
 89.4545 +        int i4442;
 89.4546 +        int i4443;
 89.4547 +        int i4444;
 89.4548 +        int i4445;
 89.4549 +        int i4446;
 89.4550 +        int i4447;
 89.4551 +        int i4448;
 89.4552 +        int i4449;
 89.4553 +        int i4450;
 89.4554 +        int i4451;
 89.4555 +        int i4452;
 89.4556 +        int i4453;
 89.4557 +        int i4454;
 89.4558 +        int i4455;
 89.4559 +        int i4456;
 89.4560 +        int i4457;
 89.4561 +        int i4458;
 89.4562 +        int i4459;
 89.4563 +        int i4460;
 89.4564 +        int i4461;
 89.4565 +        int i4462;
 89.4566 +        int i4463;
 89.4567 +        int i4464;
 89.4568 +        int i4465;
 89.4569 +        int i4466;
 89.4570 +        int i4467;
 89.4571 +        int i4468;
 89.4572 +        int i4469;
 89.4573 +        int i4470;
 89.4574 +        int i4471;
 89.4575 +        int i4472;
 89.4576 +        int i4473;
 89.4577 +        int i4474;
 89.4578 +        int i4475;
 89.4579 +        int i4476;
 89.4580 +        int i4477;
 89.4581 +        int i4478;
 89.4582 +        int i4479;
 89.4583 +        int i4480;
 89.4584 +        int i4481;
 89.4585 +        int i4482;
 89.4586 +        int i4483;
 89.4587 +        int i4484;
 89.4588 +        int i4485;
 89.4589 +        int i4486;
 89.4590 +        int i4487;
 89.4591 +        int i4488;
 89.4592 +        int i4489;
 89.4593 +        int i4490;
 89.4594 +        int i4491;
 89.4595 +        int i4492;
 89.4596 +        int i4493;
 89.4597 +        int i4494;
 89.4598 +        int i4495;
 89.4599 +        int i4496;
 89.4600 +        int i4497;
 89.4601 +        int i4498;
 89.4602 +        int i4499;
 89.4603 +        int i4500;
 89.4604 +        int i4501;
 89.4605 +        int i4502;
 89.4606 +        int i4503;
 89.4607 +        int i4504;
 89.4608 +        int i4505;
 89.4609 +        int i4506;
 89.4610 +        int i4507;
 89.4611 +        int i4508;
 89.4612 +        int i4509;
 89.4613 +        int i4510;
 89.4614 +        int i4511;
 89.4615 +        int i4512;
 89.4616 +        int i4513;
 89.4617 +        int i4514;
 89.4618 +        int i4515;
 89.4619 +        int i4516;
 89.4620 +        int i4517;
 89.4621 +        int i4518;
 89.4622 +        int i4519;
 89.4623 +        int i4520;
 89.4624 +        int i4521;
 89.4625 +        int i4522;
 89.4626 +        int i4523;
 89.4627 +        int i4524;
 89.4628 +        int i4525;
 89.4629 +        int i4526;
 89.4630 +        int i4527;
 89.4631 +        int i4528;
 89.4632 +        int i4529;
 89.4633 +        int i4530;
 89.4634 +        int i4531;
 89.4635 +        int i4532;
 89.4636 +        int i4533;
 89.4637 +        int i4534;
 89.4638 +        int i4535;
 89.4639 +        int i4536;
 89.4640 +        int i4537;
 89.4641 +        int i4538;
 89.4642 +        int i4539;
 89.4643 +        int i4540;
 89.4644 +        int i4541;
 89.4645 +        int i4542;
 89.4646 +        int i4543;
 89.4647 +        int i4544;
 89.4648 +        int i4545;
 89.4649 +        int i4546;
 89.4650 +        int i4547;
 89.4651 +        int i4548;
 89.4652 +        int i4549;
 89.4653 +        int i4550;
 89.4654 +        int i4551;
 89.4655 +        int i4552;
 89.4656 +        int i4553;
 89.4657 +        int i4554;
 89.4658 +        int i4555;
 89.4659 +        int i4556;
 89.4660 +        int i4557;
 89.4661 +        int i4558;
 89.4662 +        int i4559;
 89.4663 +        int i4560;
 89.4664 +        int i4561;
 89.4665 +        int i4562;
 89.4666 +        int i4563;
 89.4667 +        int i4564;
 89.4668 +        int i4565;
 89.4669 +        int i4566;
 89.4670 +        int i4567;
 89.4671 +        int i4568;
 89.4672 +        int i4569;
 89.4673 +        int i4570;
 89.4674 +        int i4571;
 89.4675 +        int i4572;
 89.4676 +        int i4573;
 89.4677 +        int i4574;
 89.4678 +        int i4575;
 89.4679 +        int i4576;
 89.4680 +        int i4577;
 89.4681 +        int i4578;
 89.4682 +        int i4579;
 89.4683 +        int i4580;
 89.4684 +        int i4581;
 89.4685 +        int i4582;
 89.4686 +        int i4583;
 89.4687 +        int i4584;
 89.4688 +        int i4585;
 89.4689 +        int i4586;
 89.4690 +        int i4587;
 89.4691 +        int i4588;
 89.4692 +        int i4589;
 89.4693 +        int i4590;
 89.4694 +        int i4591;
 89.4695 +        int i4592;
 89.4696 +        int i4593;
 89.4697 +        int i4594;
 89.4698 +        int i4595;
 89.4699 +        int i4596;
 89.4700 +        int i4597;
 89.4701 +        int i4598;
 89.4702 +        int i4599;
 89.4703 +        int i4600;
 89.4704 +        int i4601;
 89.4705 +        int i4602;
 89.4706 +        int i4603;
 89.4707 +        int i4604;
 89.4708 +        int i4605;
 89.4709 +        int i4606;
 89.4710 +        int i4607;
 89.4711 +        int i4608;
 89.4712 +        int i4609;
 89.4713 +        int i4610;
 89.4714 +        int i4611;
 89.4715 +        int i4612;
 89.4716 +        int i4613;
 89.4717 +        int i4614;
 89.4718 +        int i4615;
 89.4719 +        int i4616;
 89.4720 +        int i4617;
 89.4721 +        int i4618;
 89.4722 +        int i4619;
 89.4723 +        int i4620;
 89.4724 +        int i4621;
 89.4725 +        int i4622;
 89.4726 +        int i4623;
 89.4727 +        int i4624;
 89.4728 +        int i4625;
 89.4729 +        int i4626;
 89.4730 +        int i4627;
 89.4731 +        int i4628;
 89.4732 +        int i4629;
 89.4733 +        int i4630;
 89.4734 +        int i4631;
 89.4735 +        int i4632;
 89.4736 +        int i4633;
 89.4737 +        int i4634;
 89.4738 +        int i4635;
 89.4739 +        int i4636;
 89.4740 +        int i4637;
 89.4741 +        int i4638;
 89.4742 +        int i4639;
 89.4743 +        int i4640;
 89.4744 +        int i4641;
 89.4745 +        int i4642;
 89.4746 +        int i4643;
 89.4747 +        int i4644;
 89.4748 +        int i4645;
 89.4749 +        int i4646;
 89.4750 +        int i4647;
 89.4751 +        int i4648;
 89.4752 +        int i4649;
 89.4753 +        int i4650;
 89.4754 +        int i4651;
 89.4755 +        int i4652;
 89.4756 +        int i4653;
 89.4757 +        int i4654;
 89.4758 +        int i4655;
 89.4759 +        int i4656;
 89.4760 +        int i4657;
 89.4761 +        int i4658;
 89.4762 +        int i4659;
 89.4763 +        int i4660;
 89.4764 +        int i4661;
 89.4765 +        int i4662;
 89.4766 +        int i4663;
 89.4767 +        int i4664;
 89.4768 +        int i4665;
 89.4769 +        int i4666;
 89.4770 +        int i4667;
 89.4771 +        int i4668;
 89.4772 +        int i4669;
 89.4773 +        int i4670;
 89.4774 +        int i4671;
 89.4775 +        int i4672;
 89.4776 +        int i4673;
 89.4777 +        int i4674;
 89.4778 +        int i4675;
 89.4779 +        int i4676;
 89.4780 +        int i4677;
 89.4781 +        int i4678;
 89.4782 +        int i4679;
 89.4783 +        int i4680;
 89.4784 +        int i4681;
 89.4785 +        int i4682;
 89.4786 +        int i4683;
 89.4787 +        int i4684;
 89.4788 +        int i4685;
 89.4789 +        int i4686;
 89.4790 +        int i4687;
 89.4791 +        int i4688;
 89.4792 +        int i4689;
 89.4793 +        int i4690;
 89.4794 +        int i4691;
 89.4795 +        int i4692;
 89.4796 +        int i4693;
 89.4797 +        int i4694;
 89.4798 +        int i4695;
 89.4799 +        int i4696;
 89.4800 +        int i4697;
 89.4801 +        int i4698;
 89.4802 +        int i4699;
 89.4803 +        int i4700;
 89.4804 +        int i4701;
 89.4805 +        int i4702;
 89.4806 +        int i4703;
 89.4807 +        int i4704;
 89.4808 +        int i4705;
 89.4809 +        int i4706;
 89.4810 +        int i4707;
 89.4811 +        int i4708;
 89.4812 +        int i4709;
 89.4813 +        int i4710;
 89.4814 +        int i4711;
 89.4815 +        int i4712;
 89.4816 +        int i4713;
 89.4817 +        int i4714;
 89.4818 +        int i4715;
 89.4819 +        int i4716;
 89.4820 +        int i4717;
 89.4821 +        int i4718;
 89.4822 +        int i4719;
 89.4823 +        int i4720;
 89.4824 +        int i4721;
 89.4825 +        int i4722;
 89.4826 +        int i4723;
 89.4827 +        int i4724;
 89.4828 +        int i4725;
 89.4829 +        int i4726;
 89.4830 +        int i4727;
 89.4831 +        int i4728;
 89.4832 +        int i4729;
 89.4833 +        int i4730;
 89.4834 +        int i4731;
 89.4835 +        int i4732;
 89.4836 +        int i4733;
 89.4837 +        int i4734;
 89.4838 +        int i4735;
 89.4839 +        int i4736;
 89.4840 +        int i4737;
 89.4841 +        int i4738;
 89.4842 +        int i4739;
 89.4843 +        int i4740;
 89.4844 +        int i4741;
 89.4845 +        int i4742;
 89.4846 +        int i4743;
 89.4847 +        int i4744;
 89.4848 +        int i4745;
 89.4849 +        int i4746;
 89.4850 +        int i4747;
 89.4851 +        int i4748;
 89.4852 +        int i4749;
 89.4853 +        int i4750;
 89.4854 +        int i4751;
 89.4855 +        int i4752;
 89.4856 +        int i4753;
 89.4857 +        int i4754;
 89.4858 +        int i4755;
 89.4859 +        int i4756;
 89.4860 +        int i4757;
 89.4861 +        int i4758;
 89.4862 +        int i4759;
 89.4863 +        int i4760;
 89.4864 +        int i4761;
 89.4865 +        int i4762;
 89.4866 +        int i4763;
 89.4867 +        int i4764;
 89.4868 +        int i4765;
 89.4869 +        int i4766;
 89.4870 +        int i4767;
 89.4871 +        int i4768;
 89.4872 +        int i4769;
 89.4873 +        int i4770;
 89.4874 +        int i4771;
 89.4875 +        int i4772;
 89.4876 +        int i4773;
 89.4877 +        int i4774;
 89.4878 +        int i4775;
 89.4879 +        int i4776;
 89.4880 +        int i4777;
 89.4881 +        int i4778;
 89.4882 +        int i4779;
 89.4883 +        int i4780;
 89.4884 +        int i4781;
 89.4885 +        int i4782;
 89.4886 +        int i4783;
 89.4887 +        int i4784;
 89.4888 +        int i4785;
 89.4889 +        int i4786;
 89.4890 +        int i4787;
 89.4891 +        int i4788;
 89.4892 +        int i4789;
 89.4893 +        int i4790;
 89.4894 +        int i4791;
 89.4895 +        int i4792;
 89.4896 +        int i4793;
 89.4897 +        int i4794;
 89.4898 +        int i4795;
 89.4899 +        int i4796;
 89.4900 +        int i4797;
 89.4901 +        int i4798;
 89.4902 +        int i4799;
 89.4903 +        int i4800;
 89.4904 +        int i4801;
 89.4905 +        int i4802;
 89.4906 +        int i4803;
 89.4907 +        int i4804;
 89.4908 +        int i4805;
 89.4909 +        int i4806;
 89.4910 +        int i4807;
 89.4911 +        int i4808;
 89.4912 +        int i4809;
 89.4913 +        int i4810;
 89.4914 +        int i4811;
 89.4915 +        int i4812;
 89.4916 +        int i4813;
 89.4917 +        int i4814;
 89.4918 +        int i4815;
 89.4919 +        int i4816;
 89.4920 +        int i4817;
 89.4921 +        int i4818;
 89.4922 +        int i4819;
 89.4923 +        int i4820;
 89.4924 +        int i4821;
 89.4925 +        int i4822;
 89.4926 +        int i4823;
 89.4927 +        int i4824;
 89.4928 +        int i4825;
 89.4929 +        int i4826;
 89.4930 +        int i4827;
 89.4931 +        int i4828;
 89.4932 +        int i4829;
 89.4933 +        int i4830;
 89.4934 +        int i4831;
 89.4935 +        int i4832;
 89.4936 +        int i4833;
 89.4937 +        int i4834;
 89.4938 +        int i4835;
 89.4939 +        int i4836;
 89.4940 +        int i4837;
 89.4941 +        int i4838;
 89.4942 +        int i4839;
 89.4943 +        int i4840;
 89.4944 +        int i4841;
 89.4945 +        int i4842;
 89.4946 +        int i4843;
 89.4947 +        int i4844;
 89.4948 +        int i4845;
 89.4949 +        int i4846;
 89.4950 +        int i4847;
 89.4951 +        int i4848;
 89.4952 +        int i4849;
 89.4953 +        int i4850;
 89.4954 +        int i4851;
 89.4955 +        int i4852;
 89.4956 +        int i4853;
 89.4957 +        int i4854;
 89.4958 +        int i4855;
 89.4959 +        int i4856;
 89.4960 +        int i4857;
 89.4961 +        int i4858;
 89.4962 +        int i4859;
 89.4963 +        int i4860;
 89.4964 +        int i4861;
 89.4965 +        int i4862;
 89.4966 +        int i4863;
 89.4967 +        int i4864;
 89.4968 +        int i4865;
 89.4969 +        int i4866;
 89.4970 +        int i4867;
 89.4971 +        int i4868;
 89.4972 +        int i4869;
 89.4973 +        int i4870;
 89.4974 +        int i4871;
 89.4975 +        int i4872;
 89.4976 +        int i4873;
 89.4977 +        int i4874;
 89.4978 +        int i4875;
 89.4979 +        int i4876;
 89.4980 +        int i4877;
 89.4981 +        int i4878;
 89.4982 +        int i4879;
 89.4983 +        int i4880;
 89.4984 +        int i4881;
 89.4985 +        int i4882;
 89.4986 +        int i4883;
 89.4987 +        int i4884;
 89.4988 +        int i4885;
 89.4989 +        int i4886;
 89.4990 +        int i4887;
 89.4991 +        int i4888;
 89.4992 +        int i4889;
 89.4993 +        int i4890;
 89.4994 +        int i4891;
 89.4995 +        int i4892;
 89.4996 +        int i4893;
 89.4997 +        int i4894;
 89.4998 +        int i4895;
 89.4999 +        int i4896;
 89.5000 +        int i4897;
 89.5001 +        int i4898;
 89.5002 +        int i4899;
 89.5003 +        int i4900;
 89.5004 +        int i4901;
 89.5005 +        int i4902;
 89.5006 +        int i4903;
 89.5007 +        int i4904;
 89.5008 +        int i4905;
 89.5009 +        int i4906;
 89.5010 +        int i4907;
 89.5011 +        int i4908;
 89.5012 +        int i4909;
 89.5013 +        int i4910;
 89.5014 +        int i4911;
 89.5015 +        int i4912;
 89.5016 +        int i4913;
 89.5017 +        int i4914;
 89.5018 +        int i4915;
 89.5019 +        int i4916;
 89.5020 +        int i4917;
 89.5021 +        int i4918;
 89.5022 +        int i4919;
 89.5023 +        int i4920;
 89.5024 +        int i4921;
 89.5025 +        int i4922;
 89.5026 +        int i4923;
 89.5027 +        int i4924;
 89.5028 +        int i4925;
 89.5029 +        int i4926;
 89.5030 +        int i4927;
 89.5031 +        int i4928;
 89.5032 +        int i4929;
 89.5033 +        int i4930;
 89.5034 +        int i4931;
 89.5035 +        int i4932;
 89.5036 +        int i4933;
 89.5037 +        int i4934;
 89.5038 +        int i4935;
 89.5039 +        int i4936;
 89.5040 +        int i4937;
 89.5041 +        int i4938;
 89.5042 +        int i4939;
 89.5043 +        int i4940;
 89.5044 +        int i4941;
 89.5045 +        int i4942;
 89.5046 +        int i4943;
 89.5047 +        int i4944;
 89.5048 +        int i4945;
 89.5049 +        int i4946;
 89.5050 +        int i4947;
 89.5051 +        int i4948;
 89.5052 +        int i4949;
 89.5053 +        int i4950;
 89.5054 +        int i4951;
 89.5055 +        int i4952;
 89.5056 +        int i4953;
 89.5057 +        int i4954;
 89.5058 +        int i4955;
 89.5059 +        int i4956;
 89.5060 +        int i4957;
 89.5061 +        int i4958;
 89.5062 +        int i4959;
 89.5063 +        int i4960;
 89.5064 +        int i4961;
 89.5065 +        int i4962;
 89.5066 +        int i4963;
 89.5067 +        int i4964;
 89.5068 +        int i4965;
 89.5069 +        int i4966;
 89.5070 +        int i4967;
 89.5071 +        int i4968;
 89.5072 +        int i4969;
 89.5073 +        int i4970;
 89.5074 +        int i4971;
 89.5075 +        int i4972;
 89.5076 +        int i4973;
 89.5077 +        int i4974;
 89.5078 +        int i4975;
 89.5079 +        int i4976;
 89.5080 +        int i4977;
 89.5081 +        int i4978;
 89.5082 +        int i4979;
 89.5083 +        int i4980;
 89.5084 +        int i4981;
 89.5085 +        int i4982;
 89.5086 +        int i4983;
 89.5087 +        int i4984;
 89.5088 +        int i4985;
 89.5089 +        int i4986;
 89.5090 +        int i4987;
 89.5091 +        int i4988;
 89.5092 +        int i4989;
 89.5093 +        int i4990;
 89.5094 +        int i4991;
 89.5095 +        int i4992;
 89.5096 +        int i4993;
 89.5097 +        int i4994;
 89.5098 +        int i4995;
 89.5099 +        int i4996;
 89.5100 +        int i4997;
 89.5101 +        int i4998;
 89.5102 +        int i4999;
 89.5103 +        int i5000;
 89.5104 +        int i5001;
 89.5105 +        int i5002;
 89.5106 +        int i5003;
 89.5107 +        int i5004;
 89.5108 +        int i5005;
 89.5109 +        int i5006;
 89.5110 +        int i5007;
 89.5111 +        int i5008;
 89.5112 +        int i5009;
 89.5113 +        int i5010;
 89.5114 +        int i5011;
 89.5115 +        int i5012;
 89.5116 +        int i5013;
 89.5117 +        int i5014;
 89.5118 +        int i5015;
 89.5119 +        int i5016;
 89.5120 +        int i5017;
 89.5121 +        int i5018;
 89.5122 +        int i5019;
 89.5123 +        int i5020;
 89.5124 +        int i5021;
 89.5125 +        int i5022;
 89.5126 +        int i5023;
 89.5127 +        int i5024;
 89.5128 +        int i5025;
 89.5129 +        int i5026;
 89.5130 +        int i5027;
 89.5131 +        int i5028;
 89.5132 +        int i5029;
 89.5133 +        int i5030;
 89.5134 +        int i5031;
 89.5135 +        int i5032;
 89.5136 +        int i5033;
 89.5137 +        int i5034;
 89.5138 +        int i5035;
 89.5139 +        int i5036;
 89.5140 +        int i5037;
 89.5141 +        int i5038;
 89.5142 +        int i5039;
 89.5143 +        int i5040;
 89.5144 +        int i5041;
 89.5145 +        int i5042;
 89.5146 +        int i5043;
 89.5147 +        int i5044;
 89.5148 +        int i5045;
 89.5149 +        int i5046;
 89.5150 +        int i5047;
 89.5151 +        int i5048;
 89.5152 +        int i5049;
 89.5153 +        int i5050;
 89.5154 +        int i5051;
 89.5155 +        int i5052;
 89.5156 +        int i5053;
 89.5157 +        int i5054;
 89.5158 +        int i5055;
 89.5159 +        int i5056;
 89.5160 +        int i5057;
 89.5161 +        int i5058;
 89.5162 +        int i5059;
 89.5163 +        int i5060;
 89.5164 +        int i5061;
 89.5165 +        int i5062;
 89.5166 +        int i5063;
 89.5167 +        int i5064;
 89.5168 +        int i5065;
 89.5169 +        int i5066;
 89.5170 +        int i5067;
 89.5171 +        int i5068;
 89.5172 +        int i5069;
 89.5173 +        int i5070;
 89.5174 +        int i5071;
 89.5175 +        int i5072;
 89.5176 +        int i5073;
 89.5177 +        int i5074;
 89.5178 +        int i5075;
 89.5179 +        int i5076;
 89.5180 +        int i5077;
 89.5181 +        int i5078;
 89.5182 +        int i5079;
 89.5183 +        int i5080;
 89.5184 +        int i5081;
 89.5185 +        int i5082;
 89.5186 +        int i5083;
 89.5187 +        int i5084;
 89.5188 +        int i5085;
 89.5189 +        int i5086;
 89.5190 +        int i5087;
 89.5191 +        int i5088;
 89.5192 +        int i5089;
 89.5193 +        int i5090;
 89.5194 +        int i5091;
 89.5195 +        int i5092;
 89.5196 +        int i5093;
 89.5197 +        int i5094;
 89.5198 +        int i5095;
 89.5199 +        int i5096;
 89.5200 +        int i5097;
 89.5201 +        int i5098;
 89.5202 +        int i5099;
 89.5203 +        int i5100;
 89.5204 +        int i5101;
 89.5205 +        int i5102;
 89.5206 +        int i5103;
 89.5207 +        int i5104;
 89.5208 +        int i5105;
 89.5209 +        int i5106;
 89.5210 +        int i5107;
 89.5211 +        int i5108;
 89.5212 +        int i5109;
 89.5213 +        int i5110;
 89.5214 +        int i5111;
 89.5215 +        int i5112;
 89.5216 +        int i5113;
 89.5217 +        int i5114;
 89.5218 +        int i5115;
 89.5219 +        int i5116;
 89.5220 +        int i5117;
 89.5221 +        int i5118;
 89.5222 +        int i5119;
 89.5223 +        int i5120;
 89.5224 +        int i5121;
 89.5225 +        int i5122;
 89.5226 +        int i5123;
 89.5227 +        int i5124;
 89.5228 +        int i5125;
 89.5229 +        int i5126;
 89.5230 +        int i5127;
 89.5231 +        int i5128;
 89.5232 +        int i5129;
 89.5233 +        int i5130;
 89.5234 +        int i5131;
 89.5235 +        int i5132;
 89.5236 +        int i5133;
 89.5237 +        int i5134;
 89.5238 +        int i5135;
 89.5239 +        int i5136;
 89.5240 +        int i5137;
 89.5241 +        int i5138;
 89.5242 +        int i5139;
 89.5243 +        int i5140;
 89.5244 +        int i5141;
 89.5245 +        int i5142;
 89.5246 +        int i5143;
 89.5247 +        int i5144;
 89.5248 +        int i5145;
 89.5249 +        int i5146;
 89.5250 +        int i5147;
 89.5251 +        int i5148;
 89.5252 +        int i5149;
 89.5253 +        int i5150;
 89.5254 +        int i5151;
 89.5255 +        int i5152;
 89.5256 +        int i5153;
 89.5257 +        int i5154;
 89.5258 +        int i5155;
 89.5259 +        int i5156;
 89.5260 +        int i5157;
 89.5261 +        int i5158;
 89.5262 +        int i5159;
 89.5263 +        int i5160;
 89.5264 +        int i5161;
 89.5265 +        int i5162;
 89.5266 +        int i5163;
 89.5267 +        int i5164;
 89.5268 +        int i5165;
 89.5269 +        int i5166;
 89.5270 +        int i5167;
 89.5271 +        int i5168;
 89.5272 +        int i5169;
 89.5273 +        int i5170;
 89.5274 +        int i5171;
 89.5275 +        int i5172;
 89.5276 +        int i5173;
 89.5277 +        int i5174;
 89.5278 +        int i5175;
 89.5279 +        int i5176;
 89.5280 +        int i5177;
 89.5281 +        int i5178;
 89.5282 +        int i5179;
 89.5283 +        int i5180;
 89.5284 +        int i5181;
 89.5285 +        int i5182;
 89.5286 +        int i5183;
 89.5287 +        int i5184;
 89.5288 +        int i5185;
 89.5289 +        int i5186;
 89.5290 +        int i5187;
 89.5291 +        int i5188;
 89.5292 +        int i5189;
 89.5293 +        int i5190;
 89.5294 +        int i5191;
 89.5295 +        int i5192;
 89.5296 +        int i5193;
 89.5297 +        int i5194;
 89.5298 +        int i5195;
 89.5299 +        int i5196;
 89.5300 +        int i5197;
 89.5301 +        int i5198;
 89.5302 +        int i5199;
 89.5303 +        int i5200;
 89.5304 +        int i5201;
 89.5305 +        int i5202;
 89.5306 +        int i5203;
 89.5307 +        int i5204;
 89.5308 +        int i5205;
 89.5309 +        int i5206;
 89.5310 +        int i5207;
 89.5311 +        int i5208;
 89.5312 +        int i5209;
 89.5313 +        int i5210;
 89.5314 +        int i5211;
 89.5315 +        int i5212;
 89.5316 +        int i5213;
 89.5317 +        int i5214;
 89.5318 +        int i5215;
 89.5319 +        int i5216;
 89.5320 +        int i5217;
 89.5321 +        int i5218;
 89.5322 +        int i5219;
 89.5323 +        int i5220;
 89.5324 +        int i5221;
 89.5325 +        int i5222;
 89.5326 +        int i5223;
 89.5327 +        int i5224;
 89.5328 +        int i5225;
 89.5329 +        int i5226;
 89.5330 +        int i5227;
 89.5331 +        int i5228;
 89.5332 +        int i5229;
 89.5333 +        int i5230;
 89.5334 +        int i5231;
 89.5335 +        int i5232;
 89.5336 +        int i5233;
 89.5337 +        int i5234;
 89.5338 +        int i5235;
 89.5339 +        int i5236;
 89.5340 +        int i5237;
 89.5341 +        int i5238;
 89.5342 +        int i5239;
 89.5343 +        int i5240;
 89.5344 +        int i5241;
 89.5345 +        int i5242;
 89.5346 +        int i5243;
 89.5347 +        int i5244;
 89.5348 +        int i5245;
 89.5349 +        int i5246;
 89.5350 +        int i5247;
 89.5351 +        int i5248;
 89.5352 +        int i5249;
 89.5353 +        int i5250;
 89.5354 +        int i5251;
 89.5355 +        int i5252;
 89.5356 +        int i5253;
 89.5357 +        int i5254;
 89.5358 +        int i5255;
 89.5359 +        int i5256;
 89.5360 +        int i5257;
 89.5361 +        int i5258;
 89.5362 +        int i5259;
 89.5363 +        int i5260;
 89.5364 +        int i5261;
 89.5365 +        int i5262;
 89.5366 +        int i5263;
 89.5367 +        int i5264;
 89.5368 +        int i5265;
 89.5369 +        int i5266;
 89.5370 +        int i5267;
 89.5371 +        int i5268;
 89.5372 +        int i5269;
 89.5373 +        int i5270;
 89.5374 +        int i5271;
 89.5375 +        int i5272;
 89.5376 +        int i5273;
 89.5377 +        int i5274;
 89.5378 +        int i5275;
 89.5379 +        int i5276;
 89.5380 +        int i5277;
 89.5381 +        int i5278;
 89.5382 +        int i5279;
 89.5383 +        int i5280;
 89.5384 +        int i5281;
 89.5385 +        int i5282;
 89.5386 +        int i5283;
 89.5387 +        int i5284;
 89.5388 +        int i5285;
 89.5389 +        int i5286;
 89.5390 +        int i5287;
 89.5391 +        int i5288;
 89.5392 +        int i5289;
 89.5393 +        int i5290;
 89.5394 +        int i5291;
 89.5395 +        int i5292;
 89.5396 +        int i5293;
 89.5397 +        int i5294;
 89.5398 +        int i5295;
 89.5399 +        int i5296;
 89.5400 +        int i5297;
 89.5401 +        int i5298;
 89.5402 +        int i5299;
 89.5403 +        int i5300;
 89.5404 +        int i5301;
 89.5405 +        int i5302;
 89.5406 +        int i5303;
 89.5407 +        int i5304;
 89.5408 +        int i5305;
 89.5409 +        int i5306;
 89.5410 +        int i5307;
 89.5411 +        int i5308;
 89.5412 +        int i5309;
 89.5413 +        int i5310;
 89.5414 +        int i5311;
 89.5415 +        int i5312;
 89.5416 +        int i5313;
 89.5417 +        int i5314;
 89.5418 +        int i5315;
 89.5419 +        int i5316;
 89.5420 +        int i5317;
 89.5421 +        int i5318;
 89.5422 +        int i5319;
 89.5423 +        int i5320;
 89.5424 +        int i5321;
 89.5425 +        int i5322;
 89.5426 +        int i5323;
 89.5427 +        int i5324;
 89.5428 +        int i5325;
 89.5429 +        int i5326;
 89.5430 +        int i5327;
 89.5431 +        int i5328;
 89.5432 +        int i5329;
 89.5433 +        int i5330;
 89.5434 +        int i5331;
 89.5435 +        int i5332;
 89.5436 +        int i5333;
 89.5437 +        int i5334;
 89.5438 +        int i5335;
 89.5439 +        int i5336;
 89.5440 +        int i5337;
 89.5441 +        int i5338;
 89.5442 +        int i5339;
 89.5443 +        int i5340;
 89.5444 +        int i5341;
 89.5445 +        int i5342;
 89.5446 +        int i5343;
 89.5447 +        int i5344;
 89.5448 +        int i5345;
 89.5449 +        int i5346;
 89.5450 +        int i5347;
 89.5451 +        int i5348;
 89.5452 +        int i5349;
 89.5453 +        int i5350;
 89.5454 +        int i5351;
 89.5455 +        int i5352;
 89.5456 +        int i5353;
 89.5457 +        int i5354;
 89.5458 +        int i5355;
 89.5459 +        int i5356;
 89.5460 +        int i5357;
 89.5461 +        int i5358;
 89.5462 +        int i5359;
 89.5463 +        int i5360;
 89.5464 +        int i5361;
 89.5465 +        int i5362;
 89.5466 +        int i5363;
 89.5467 +        int i5364;
 89.5468 +        int i5365;
 89.5469 +        int i5366;
 89.5470 +        int i5367;
 89.5471 +        int i5368;
 89.5472 +        int i5369;
 89.5473 +        int i5370;
 89.5474 +        int i5371;
 89.5475 +        int i5372;
 89.5476 +        int i5373;
 89.5477 +        int i5374;
 89.5478 +        int i5375;
 89.5479 +        int i5376;
 89.5480 +        int i5377;
 89.5481 +        int i5378;
 89.5482 +        int i5379;
 89.5483 +        int i5380;
 89.5484 +        int i5381;
 89.5485 +        int i5382;
 89.5486 +        int i5383;
 89.5487 +        int i5384;
 89.5488 +        int i5385;
 89.5489 +        int i5386;
 89.5490 +        int i5387;
 89.5491 +        int i5388;
 89.5492 +        int i5389;
 89.5493 +        int i5390;
 89.5494 +        int i5391;
 89.5495 +        int i5392;
 89.5496 +        int i5393;
 89.5497 +        int i5394;
 89.5498 +        int i5395;
 89.5499 +        int i5396;
 89.5500 +        int i5397;
 89.5501 +        int i5398;
 89.5502 +        int i5399;
 89.5503 +        int i5400;
 89.5504 +        int i5401;
 89.5505 +        int i5402;
 89.5506 +        int i5403;
 89.5507 +        int i5404;
 89.5508 +        int i5405;
 89.5509 +        int i5406;
 89.5510 +        int i5407;
 89.5511 +        int i5408;
 89.5512 +        int i5409;
 89.5513 +        int i5410;
 89.5514 +        int i5411;
 89.5515 +        int i5412;
 89.5516 +        int i5413;
 89.5517 +        int i5414;
 89.5518 +        int i5415;
 89.5519 +        int i5416;
 89.5520 +        int i5417;
 89.5521 +        int i5418;
 89.5522 +        int i5419;
 89.5523 +        int i5420;
 89.5524 +        int i5421;
 89.5525 +        int i5422;
 89.5526 +        int i5423;
 89.5527 +        int i5424;
 89.5528 +        int i5425;
 89.5529 +        int i5426;
 89.5530 +        int i5427;
 89.5531 +        int i5428;
 89.5532 +        int i5429;
 89.5533 +        int i5430;
 89.5534 +        int i5431;
 89.5535 +        int i5432;
 89.5536 +        int i5433;
 89.5537 +        int i5434;
 89.5538 +        int i5435;
 89.5539 +        int i5436;
 89.5540 +        int i5437;
 89.5541 +        int i5438;
 89.5542 +        int i5439;
 89.5543 +        int i5440;
 89.5544 +        int i5441;
 89.5545 +        int i5442;
 89.5546 +        int i5443;
 89.5547 +        int i5444;
 89.5548 +        int i5445;
 89.5549 +        int i5446;
 89.5550 +        int i5447;
 89.5551 +        int i5448;
 89.5552 +        int i5449;
 89.5553 +        int i5450;
 89.5554 +        int i5451;
 89.5555 +        int i5452;
 89.5556 +        int i5453;
 89.5557 +        int i5454;
 89.5558 +        int i5455;
 89.5559 +        int i5456;
 89.5560 +        int i5457;
 89.5561 +        int i5458;
 89.5562 +        int i5459;
 89.5563 +        int i5460;
 89.5564 +        int i5461;
 89.5565 +        int i5462;
 89.5566 +        int i5463;
 89.5567 +        int i5464;
 89.5568 +        int i5465;
 89.5569 +        int i5466;
 89.5570 +        int i5467;
 89.5571 +        int i5468;
 89.5572 +        int i5469;
 89.5573 +        int i5470;
 89.5574 +        int i5471;
 89.5575 +        int i5472;
 89.5576 +        int i5473;
 89.5577 +        int i5474;
 89.5578 +        int i5475;
 89.5579 +        int i5476;
 89.5580 +        int i5477;
 89.5581 +        int i5478;
 89.5582 +        int i5479;
 89.5583 +        int i5480;
 89.5584 +        int i5481;
 89.5585 +        int i5482;
 89.5586 +        int i5483;
 89.5587 +        int i5484;
 89.5588 +        int i5485;
 89.5589 +        int i5486;
 89.5590 +        int i5487;
 89.5591 +        int i5488;
 89.5592 +        int i5489;
 89.5593 +        int i5490;
 89.5594 +        int i5491;
 89.5595 +        int i5492;
 89.5596 +        int i5493;
 89.5597 +        int i5494;
 89.5598 +        int i5495;
 89.5599 +        int i5496;
 89.5600 +        int i5497;
 89.5601 +        int i5498;
 89.5602 +        int i5499;
 89.5603 +        int i5500;
 89.5604 +        int i5501;
 89.5605 +        int i5502;
 89.5606 +        int i5503;
 89.5607 +        int i5504;
 89.5608 +        int i5505;
 89.5609 +        int i5506;
 89.5610 +        int i5507;
 89.5611 +        int i5508;
 89.5612 +        int i5509;
 89.5613 +        int i5510;
 89.5614 +        int i5511;
 89.5615 +        int i5512;
 89.5616 +        int i5513;
 89.5617 +        int i5514;
 89.5618 +        int i5515;
 89.5619 +        int i5516;
 89.5620 +        int i5517;
 89.5621 +        int i5518;
 89.5622 +        int i5519;
 89.5623 +        int i5520;
 89.5624 +        int i5521;
 89.5625 +        int i5522;
 89.5626 +        int i5523;
 89.5627 +        int i5524;
 89.5628 +        int i5525;
 89.5629 +        int i5526;
 89.5630 +        int i5527;
 89.5631 +        int i5528;
 89.5632 +        int i5529;
 89.5633 +        int i5530;
 89.5634 +        int i5531;
 89.5635 +        int i5532;
 89.5636 +        int i5533;
 89.5637 +        int i5534;
 89.5638 +        int i5535;
 89.5639 +        int i5536;
 89.5640 +        int i5537;
 89.5641 +        int i5538;
 89.5642 +        int i5539;
 89.5643 +        int i5540;
 89.5644 +        int i5541;
 89.5645 +        int i5542;
 89.5646 +        int i5543;
 89.5647 +        int i5544;
 89.5648 +        int i5545;
 89.5649 +        int i5546;
 89.5650 +        int i5547;
 89.5651 +        int i5548;
 89.5652 +        int i5549;
 89.5653 +        int i5550;
 89.5654 +        int i5551;
 89.5655 +        int i5552;
 89.5656 +        int i5553;
 89.5657 +        int i5554;
 89.5658 +        int i5555;
 89.5659 +        int i5556;
 89.5660 +        int i5557;
 89.5661 +        int i5558;
 89.5662 +        int i5559;
 89.5663 +        int i5560;
 89.5664 +        int i5561;
 89.5665 +        int i5562;
 89.5666 +        int i5563;
 89.5667 +        int i5564;
 89.5668 +        int i5565;
 89.5669 +        int i5566;
 89.5670 +        int i5567;
 89.5671 +        int i5568;
 89.5672 +        int i5569;
 89.5673 +        int i5570;
 89.5674 +        int i5571;
 89.5675 +        int i5572;
 89.5676 +        int i5573;
 89.5677 +        int i5574;
 89.5678 +        int i5575;
 89.5679 +        int i5576;
 89.5680 +        int i5577;
 89.5681 +        int i5578;
 89.5682 +        int i5579;
 89.5683 +        int i5580;
 89.5684 +        int i5581;
 89.5685 +        int i5582;
 89.5686 +        int i5583;
 89.5687 +        int i5584;
 89.5688 +        int i5585;
 89.5689 +        int i5586;
 89.5690 +        int i5587;
 89.5691 +        int i5588;
 89.5692 +        int i5589;
 89.5693 +        int i5590;
 89.5694 +        int i5591;
 89.5695 +        int i5592;
 89.5696 +        int i5593;
 89.5697 +        int i5594;
 89.5698 +        int i5595;
 89.5699 +        int i5596;
 89.5700 +        int i5597;
 89.5701 +        int i5598;
 89.5702 +        int i5599;
 89.5703 +        int i5600;
 89.5704 +        int i5601;
 89.5705 +        int i5602;
 89.5706 +        int i5603;
 89.5707 +        int i5604;
 89.5708 +        int i5605;
 89.5709 +        int i5606;
 89.5710 +        int i5607;
 89.5711 +        int i5608;
 89.5712 +        int i5609;
 89.5713 +        int i5610;
 89.5714 +        int i5611;
 89.5715 +        int i5612;
 89.5716 +        int i5613;
 89.5717 +        int i5614;
 89.5718 +        int i5615;
 89.5719 +        int i5616;
 89.5720 +        int i5617;
 89.5721 +        int i5618;
 89.5722 +        int i5619;
 89.5723 +        int i5620;
 89.5724 +        int i5621;
 89.5725 +        int i5622;
 89.5726 +        int i5623;
 89.5727 +        int i5624;
 89.5728 +        int i5625;
 89.5729 +        int i5626;
 89.5730 +        int i5627;
 89.5731 +        int i5628;
 89.5732 +        int i5629;
 89.5733 +        int i5630;
 89.5734 +        int i5631;
 89.5735 +        int i5632;
 89.5736 +        int i5633;
 89.5737 +        int i5634;
 89.5738 +        int i5635;
 89.5739 +        int i5636;
 89.5740 +        int i5637;
 89.5741 +        int i5638;
 89.5742 +        int i5639;
 89.5743 +        int i5640;
 89.5744 +        int i5641;
 89.5745 +        int i5642;
 89.5746 +        int i5643;
 89.5747 +        int i5644;
 89.5748 +        int i5645;
 89.5749 +        int i5646;
 89.5750 +        int i5647;
 89.5751 +        int i5648;
 89.5752 +        int i5649;
 89.5753 +        int i5650;
 89.5754 +        int i5651;
 89.5755 +        int i5652;
 89.5756 +        int i5653;
 89.5757 +        int i5654;
 89.5758 +        int i5655;
 89.5759 +        int i5656;
 89.5760 +        int i5657;
 89.5761 +        int i5658;
 89.5762 +        int i5659;
 89.5763 +        int i5660;
 89.5764 +        int i5661;
 89.5765 +        int i5662;
 89.5766 +        int i5663;
 89.5767 +        int i5664;
 89.5768 +        int i5665;
 89.5769 +        int i5666;
 89.5770 +        int i5667;
 89.5771 +        int i5668;
 89.5772 +        int i5669;
 89.5773 +        int i5670;
 89.5774 +        int i5671;
 89.5775 +        int i5672;
 89.5776 +        int i5673;
 89.5777 +        int i5674;
 89.5778 +        int i5675;
 89.5779 +        int i5676;
 89.5780 +        int i5677;
 89.5781 +        int i5678;
 89.5782 +        int i5679;
 89.5783 +        int i5680;
 89.5784 +        int i5681;
 89.5785 +        int i5682;
 89.5786 +        int i5683;
 89.5787 +        int i5684;
 89.5788 +        int i5685;
 89.5789 +        int i5686;
 89.5790 +        int i5687;
 89.5791 +        int i5688;
 89.5792 +        int i5689;
 89.5793 +        int i5690;
 89.5794 +        int i5691;
 89.5795 +        int i5692;
 89.5796 +        int i5693;
 89.5797 +        int i5694;
 89.5798 +        int i5695;
 89.5799 +        int i5696;
 89.5800 +        int i5697;
 89.5801 +        int i5698;
 89.5802 +        int i5699;
 89.5803 +        int i5700;
 89.5804 +        int i5701;
 89.5805 +        int i5702;
 89.5806 +        int i5703;
 89.5807 +        int i5704;
 89.5808 +        int i5705;
 89.5809 +        int i5706;
 89.5810 +        int i5707;
 89.5811 +        int i5708;
 89.5812 +        int i5709;
 89.5813 +        int i5710;
 89.5814 +        int i5711;
 89.5815 +        int i5712;
 89.5816 +        int i5713;
 89.5817 +        int i5714;
 89.5818 +        int i5715;
 89.5819 +        int i5716;
 89.5820 +        int i5717;
 89.5821 +        int i5718;
 89.5822 +        int i5719;
 89.5823 +        int i5720;
 89.5824 +        int i5721;
 89.5825 +        int i5722;
 89.5826 +        int i5723;
 89.5827 +        int i5724;
 89.5828 +        int i5725;
 89.5829 +        int i5726;
 89.5830 +        int i5727;
 89.5831 +        int i5728;
 89.5832 +        int i5729;
 89.5833 +        int i5730;
 89.5834 +        int i5731;
 89.5835 +        int i5732;
 89.5836 +        int i5733;
 89.5837 +        int i5734;
 89.5838 +        int i5735;
 89.5839 +        int i5736;
 89.5840 +        int i5737;
 89.5841 +        int i5738;
 89.5842 +        int i5739;
 89.5843 +        int i5740;
 89.5844 +        int i5741;
 89.5845 +        int i5742;
 89.5846 +        int i5743;
 89.5847 +        int i5744;
 89.5848 +        int i5745;
 89.5849 +        int i5746;
 89.5850 +        int i5747;
 89.5851 +        int i5748;
 89.5852 +        int i5749;
 89.5853 +        int i5750;
 89.5854 +        int i5751;
 89.5855 +        int i5752;
 89.5856 +        int i5753;
 89.5857 +        int i5754;
 89.5858 +        int i5755;
 89.5859 +        int i5756;
 89.5860 +        int i5757;
 89.5861 +        int i5758;
 89.5862 +        int i5759;
 89.5863 +        int i5760;
 89.5864 +        int i5761;
 89.5865 +        int i5762;
 89.5866 +        int i5763;
 89.5867 +        int i5764;
 89.5868 +        int i5765;
 89.5869 +        int i5766;
 89.5870 +        int i5767;
 89.5871 +        int i5768;
 89.5872 +        int i5769;
 89.5873 +        int i5770;
 89.5874 +        int i5771;
 89.5875 +        int i5772;
 89.5876 +        int i5773;
 89.5877 +        int i5774;
 89.5878 +        int i5775;
 89.5879 +        int i5776;
 89.5880 +        int i5777;
 89.5881 +        int i5778;
 89.5882 +        int i5779;
 89.5883 +        int i5780;
 89.5884 +        int i5781;
 89.5885 +        int i5782;
 89.5886 +        int i5783;
 89.5887 +        int i5784;
 89.5888 +        int i5785;
 89.5889 +        int i5786;
 89.5890 +        int i5787;
 89.5891 +        int i5788;
 89.5892 +        int i5789;
 89.5893 +        int i5790;
 89.5894 +        int i5791;
 89.5895 +        int i5792;
 89.5896 +        int i5793;
 89.5897 +        int i5794;
 89.5898 +        int i5795;
 89.5899 +        int i5796;
 89.5900 +        int i5797;
 89.5901 +        int i5798;
 89.5902 +        int i5799;
 89.5903 +        int i5800;
 89.5904 +        int i5801;
 89.5905 +        int i5802;
 89.5906 +        int i5803;
 89.5907 +        int i5804;
 89.5908 +        int i5805;
 89.5909 +        int i5806;
 89.5910 +        int i5807;
 89.5911 +        int i5808;
 89.5912 +        int i5809;
 89.5913 +        int i5810;
 89.5914 +        int i5811;
 89.5915 +        int i5812;
 89.5916 +        int i5813;
 89.5917 +        int i5814;
 89.5918 +        int i5815;
 89.5919 +        int i5816;
 89.5920 +        int i5817;
 89.5921 +        int i5818;
 89.5922 +        int i5819;
 89.5923 +        int i5820;
 89.5924 +        int i5821;
 89.5925 +        int i5822;
 89.5926 +        int i5823;
 89.5927 +        int i5824;
 89.5928 +        int i5825;
 89.5929 +        int i5826;
 89.5930 +        int i5827;
 89.5931 +        int i5828;
 89.5932 +        int i5829;
 89.5933 +        int i5830;
 89.5934 +        int i5831;
 89.5935 +        int i5832;
 89.5936 +        int i5833;
 89.5937 +        int i5834;
 89.5938 +        int i5835;
 89.5939 +        int i5836;
 89.5940 +        int i5837;
 89.5941 +        int i5838;
 89.5942 +        int i5839;
 89.5943 +        int i5840;
 89.5944 +        int i5841;
 89.5945 +        int i5842;
 89.5946 +        int i5843;
 89.5947 +        int i5844;
 89.5948 +        int i5845;
 89.5949 +        int i5846;
 89.5950 +        int i5847;
 89.5951 +        int i5848;
 89.5952 +        int i5849;
 89.5953 +        int i5850;
 89.5954 +        int i5851;
 89.5955 +        int i5852;
 89.5956 +        int i5853;
 89.5957 +        int i5854;
 89.5958 +        int i5855;
 89.5959 +        int i5856;
 89.5960 +        int i5857;
 89.5961 +        int i5858;
 89.5962 +        int i5859;
 89.5963 +        int i5860;
 89.5964 +        int i5861;
 89.5965 +        int i5862;
 89.5966 +        int i5863;
 89.5967 +        int i5864;
 89.5968 +        int i5865;
 89.5969 +        int i5866;
 89.5970 +        int i5867;
 89.5971 +        int i5868;
 89.5972 +        int i5869;
 89.5973 +        int i5870;
 89.5974 +        int i5871;
 89.5975 +        int i5872;
 89.5976 +        int i5873;
 89.5977 +        int i5874;
 89.5978 +        int i5875;
 89.5979 +        int i5876;
 89.5980 +        int i5877;
 89.5981 +        int i5878;
 89.5982 +        int i5879;
 89.5983 +        int i5880;
 89.5984 +        int i5881;
 89.5985 +        int i5882;
 89.5986 +        int i5883;
 89.5987 +        int i5884;
 89.5988 +        int i5885;
 89.5989 +        int i5886;
 89.5990 +        int i5887;
 89.5991 +        int i5888;
 89.5992 +        int i5889;
 89.5993 +        int i5890;
 89.5994 +        int i5891;
 89.5995 +        int i5892;
 89.5996 +        int i5893;
 89.5997 +        int i5894;
 89.5998 +        int i5895;
 89.5999 +        int i5896;
 89.6000 +        int i5897;
 89.6001 +        int i5898;
 89.6002 +        int i5899;
 89.6003 +        int i5900;
 89.6004 +        int i5901;
 89.6005 +        int i5902;
 89.6006 +        int i5903;
 89.6007 +        int i5904;
 89.6008 +        int i5905;
 89.6009 +        int i5906;
 89.6010 +        int i5907;
 89.6011 +        int i5908;
 89.6012 +        int i5909;
 89.6013 +        int i5910;
 89.6014 +        int i5911;
 89.6015 +        int i5912;
 89.6016 +        int i5913;
 89.6017 +        int i5914;
 89.6018 +        int i5915;
 89.6019 +        int i5916;
 89.6020 +        int i5917;
 89.6021 +        int i5918;
 89.6022 +        int i5919;
 89.6023 +        int i5920;
 89.6024 +        int i5921;
 89.6025 +        int i5922;
 89.6026 +        int i5923;
 89.6027 +        int i5924;
 89.6028 +        int i5925;
 89.6029 +        int i5926;
 89.6030 +        int i5927;
 89.6031 +        int i5928;
 89.6032 +        int i5929;
 89.6033 +        int i5930;
 89.6034 +        int i5931;
 89.6035 +        int i5932;
 89.6036 +        int i5933;
 89.6037 +        int i5934;
 89.6038 +        int i5935;
 89.6039 +        int i5936;
 89.6040 +        int i5937;
 89.6041 +        int i5938;
 89.6042 +        int i5939;
 89.6043 +        int i5940;
 89.6044 +        int i5941;
 89.6045 +        int i5942;
 89.6046 +        int i5943;
 89.6047 +        int i5944;
 89.6048 +        int i5945;
 89.6049 +        int i5946;
 89.6050 +        int i5947;
 89.6051 +        int i5948;
 89.6052 +        int i5949;
 89.6053 +        int i5950;
 89.6054 +        int i5951;
 89.6055 +        int i5952;
 89.6056 +        int i5953;
 89.6057 +        int i5954;
 89.6058 +        int i5955;
 89.6059 +        int i5956;
 89.6060 +        int i5957;
 89.6061 +        int i5958;
 89.6062 +        int i5959;
 89.6063 +        int i5960;
 89.6064 +        int i5961;
 89.6065 +        int i5962;
 89.6066 +        int i5963;
 89.6067 +        int i5964;
 89.6068 +        int i5965;
 89.6069 +        int i5966;
 89.6070 +        int i5967;
 89.6071 +        int i5968;
 89.6072 +        int i5969;
 89.6073 +        int i5970;
 89.6074 +        int i5971;
 89.6075 +        int i5972;
 89.6076 +        int i5973;
 89.6077 +        int i5974;
 89.6078 +        int i5975;
 89.6079 +        int i5976;
 89.6080 +        int i5977;
 89.6081 +        int i5978;
 89.6082 +        int i5979;
 89.6083 +        int i5980;
 89.6084 +        int i5981;
 89.6085 +        int i5982;
 89.6086 +        int i5983;
 89.6087 +        int i5984;
 89.6088 +        int i5985;
 89.6089 +        int i5986;
 89.6090 +        int i5987;
 89.6091 +        int i5988;
 89.6092 +        int i5989;
 89.6093 +        int i5990;
 89.6094 +        int i5991;
 89.6095 +        int i5992;
 89.6096 +        int i5993;
 89.6097 +        int i5994;
 89.6098 +        int i5995;
 89.6099 +        int i5996;
 89.6100 +        int i5997;
 89.6101 +        int i5998;
 89.6102 +        int i5999;
 89.6103 +        int i6000;
 89.6104 +        int i6001;
 89.6105 +        int i6002;
 89.6106 +        int i6003;
 89.6107 +        int i6004;
 89.6108 +        int i6005;
 89.6109 +        int i6006;
 89.6110 +        int i6007;
 89.6111 +        int i6008;
 89.6112 +        int i6009;
 89.6113 +        int i6010;
 89.6114 +        int i6011;
 89.6115 +        int i6012;
 89.6116 +        int i6013;
 89.6117 +        int i6014;
 89.6118 +        int i6015;
 89.6119 +        int i6016;
 89.6120 +        int i6017;
 89.6121 +        int i6018;
 89.6122 +        int i6019;
 89.6123 +        int i6020;
 89.6124 +        int i6021;
 89.6125 +        int i6022;
 89.6126 +        int i6023;
 89.6127 +        int i6024;
 89.6128 +        int i6025;
 89.6129 +        int i6026;
 89.6130 +        int i6027;
 89.6131 +        int i6028;
 89.6132 +        int i6029;
 89.6133 +        int i6030;
 89.6134 +        int i6031;
 89.6135 +        int i6032;
 89.6136 +        int i6033;
 89.6137 +        int i6034;
 89.6138 +        int i6035;
 89.6139 +        int i6036;
 89.6140 +        int i6037;
 89.6141 +        int i6038;
 89.6142 +        int i6039;
 89.6143 +        int i6040;
 89.6144 +        int i6041;
 89.6145 +        int i6042;
 89.6146 +        int i6043;
 89.6147 +        int i6044;
 89.6148 +        int i6045;
 89.6149 +        int i6046;
 89.6150 +        int i6047;
 89.6151 +        int i6048;
 89.6152 +        int i6049;
 89.6153 +        int i6050;
 89.6154 +        int i6051;
 89.6155 +        int i6052;
 89.6156 +        int i6053;
 89.6157 +        int i6054;
 89.6158 +        int i6055;
 89.6159 +        int i6056;
 89.6160 +        int i6057;
 89.6161 +        int i6058;
 89.6162 +        int i6059;
 89.6163 +        int i6060;
 89.6164 +        int i6061;
 89.6165 +        int i6062;
 89.6166 +        int i6063;
 89.6167 +        int i6064;
 89.6168 +        int i6065;
 89.6169 +        int i6066;
 89.6170 +        int i6067;
 89.6171 +        int i6068;
 89.6172 +        int i6069;
 89.6173 +        int i6070;
 89.6174 +        int i6071;
 89.6175 +        int i6072;
 89.6176 +        int i6073;
 89.6177 +        int i6074;
 89.6178 +        int i6075;
 89.6179 +        int i6076;
 89.6180 +        int i6077;
 89.6181 +        int i6078;
 89.6182 +        int i6079;
 89.6183 +        int i6080;
 89.6184 +        int i6081;
 89.6185 +        int i6082;
 89.6186 +        int i6083;
 89.6187 +        int i6084;
 89.6188 +        int i6085;
 89.6189 +        int i6086;
 89.6190 +        int i6087;
 89.6191 +        int i6088;
 89.6192 +        int i6089;
 89.6193 +        int i6090;
 89.6194 +        int i6091;
 89.6195 +        int i6092;
 89.6196 +        int i6093;
 89.6197 +        int i6094;
 89.6198 +        int i6095;
 89.6199 +        int i6096;
 89.6200 +        int i6097;
 89.6201 +        int i6098;
 89.6202 +        int i6099;
 89.6203 +        int i6100;
 89.6204 +        int i6101;
 89.6205 +        int i6102;
 89.6206 +        int i6103;
 89.6207 +        int i6104;
 89.6208 +        int i6105;
 89.6209 +        int i6106;
 89.6210 +        int i6107;
 89.6211 +        int i6108;
 89.6212 +        int i6109;
 89.6213 +        int i6110;
 89.6214 +        int i6111;
 89.6215 +        int i6112;
 89.6216 +        int i6113;
 89.6217 +        int i6114;
 89.6218 +        int i6115;
 89.6219 +        int i6116;
 89.6220 +        int i6117;
 89.6221 +        int i6118;
 89.6222 +        int i6119;
 89.6223 +        int i6120;
 89.6224 +        int i6121;
 89.6225 +        int i6122;
 89.6226 +        int i6123;
 89.6227 +        int i6124;
 89.6228 +        int i6125;
 89.6229 +        int i6126;
 89.6230 +        int i6127;
 89.6231 +        int i6128;
 89.6232 +        int i6129;
 89.6233 +        int i6130;
 89.6234 +        int i6131;
 89.6235 +        int i6132;
 89.6236 +        int i6133;
 89.6237 +        int i6134;
 89.6238 +        int i6135;
 89.6239 +        int i6136;
 89.6240 +        int i6137;
 89.6241 +        int i6138;
 89.6242 +        int i6139;
 89.6243 +        int i6140;
 89.6244 +        int i6141;
 89.6245 +        int i6142;
 89.6246 +        int i6143;
 89.6247 +        int i6144;
 89.6248 +        int i6145;
 89.6249 +        int i6146;
 89.6250 +        int i6147;
 89.6251 +        int i6148;
 89.6252 +        int i6149;
 89.6253 +        int i6150;
 89.6254 +        int i6151;
 89.6255 +        int i6152;
 89.6256 +        int i6153;
 89.6257 +        int i6154;
 89.6258 +        int i6155;
 89.6259 +        int i6156;
 89.6260 +        int i6157;
 89.6261 +        int i6158;
 89.6262 +        int i6159;
 89.6263 +        int i6160;
 89.6264 +        int i6161;
 89.6265 +        int i6162;
 89.6266 +        int i6163;
 89.6267 +        int i6164;
 89.6268 +        int i6165;
 89.6269 +        int i6166;
 89.6270 +        int i6167;
 89.6271 +        int i6168;
 89.6272 +        int i6169;
 89.6273 +        int i6170;
 89.6274 +        int i6171;
 89.6275 +        int i6172;
 89.6276 +        int i6173;
 89.6277 +        int i6174;
 89.6278 +        int i6175;
 89.6279 +        int i6176;
 89.6280 +        int i6177;
 89.6281 +        int i6178;
 89.6282 +        int i6179;
 89.6283 +        int i6180;
 89.6284 +        int i6181;
 89.6285 +        int i6182;
 89.6286 +        int i6183;
 89.6287 +        int i6184;
 89.6288 +        int i6185;
 89.6289 +        int i6186;
 89.6290 +        int i6187;
 89.6291 +        int i6188;
 89.6292 +        int i6189;
 89.6293 +        int i6190;
 89.6294 +        int i6191;
 89.6295 +        int i6192;
 89.6296 +        int i6193;
 89.6297 +        int i6194;
 89.6298 +        int i6195;
 89.6299 +        int i6196;
 89.6300 +        int i6197;
 89.6301 +        int i6198;
 89.6302 +        int i6199;
 89.6303 +        int i6200;
 89.6304 +        int i6201;
 89.6305 +        int i6202;
 89.6306 +        int i6203;
 89.6307 +        int i6204;
 89.6308 +        int i6205;
 89.6309 +        int i6206;
 89.6310 +        int i6207;
 89.6311 +        int i6208;
 89.6312 +        int i6209;
 89.6313 +        int i6210;
 89.6314 +        int i6211;
 89.6315 +        int i6212;
 89.6316 +        int i6213;
 89.6317 +        int i6214;
 89.6318 +        int i6215;
 89.6319 +        int i6216;
 89.6320 +        int i6217;
 89.6321 +        int i6218;
 89.6322 +        int i6219;
 89.6323 +        int i6220;
 89.6324 +        int i6221;
 89.6325 +        int i6222;
 89.6326 +        int i6223;
 89.6327 +        int i6224;
 89.6328 +        int i6225;
 89.6329 +        int i6226;
 89.6330 +        int i6227;
 89.6331 +        int i6228;
 89.6332 +        int i6229;
 89.6333 +        int i6230;
 89.6334 +        int i6231;
 89.6335 +        int i6232;
 89.6336 +        int i6233;
 89.6337 +        int i6234;
 89.6338 +        int i6235;
 89.6339 +        int i6236;
 89.6340 +        int i6237;
 89.6341 +        int i6238;
 89.6342 +        int i6239;
 89.6343 +        int i6240;
 89.6344 +        int i6241;
 89.6345 +        int i6242;
 89.6346 +        int i6243;
 89.6347 +        int i6244;
 89.6348 +        int i6245;
 89.6349 +        int i6246;
 89.6350 +        int i6247;
 89.6351 +        int i6248;
 89.6352 +        int i6249;
 89.6353 +        int i6250;
 89.6354 +        int i6251;
 89.6355 +        int i6252;
 89.6356 +        int i6253;
 89.6357 +        int i6254;
 89.6358 +        int i6255;
 89.6359 +        int i6256;
 89.6360 +        int i6257;
 89.6361 +        int i6258;
 89.6362 +        int i6259;
 89.6363 +        int i6260;
 89.6364 +        int i6261;
 89.6365 +        int i6262;
 89.6366 +        int i6263;
 89.6367 +        int i6264;
 89.6368 +        int i6265;
 89.6369 +        int i6266;
 89.6370 +        int i6267;
 89.6371 +        int i6268;
 89.6372 +        int i6269;
 89.6373 +        int i6270;
 89.6374 +        int i6271;
 89.6375 +        int i6272;
 89.6376 +        int i6273;
 89.6377 +        int i6274;
 89.6378 +        int i6275;
 89.6379 +        int i6276;
 89.6380 +        int i6277;
 89.6381 +        int i6278;
 89.6382 +        int i6279;
 89.6383 +        int i6280;
 89.6384 +        int i6281;
 89.6385 +        int i6282;
 89.6386 +        int i6283;
 89.6387 +        int i6284;
 89.6388 +        int i6285;
 89.6389 +        int i6286;
 89.6390 +        int i6287;
 89.6391 +        int i6288;
 89.6392 +        int i6289;
 89.6393 +        int i6290;
 89.6394 +        int i6291;
 89.6395 +        int i6292;
 89.6396 +        int i6293;
 89.6397 +        int i6294;
 89.6398 +        int i6295;
 89.6399 +        int i6296;
 89.6400 +        int i6297;
 89.6401 +        int i6298;
 89.6402 +        int i6299;
 89.6403 +        int i6300;
 89.6404 +        int i6301;
 89.6405 +        int i6302;
 89.6406 +        int i6303;
 89.6407 +        int i6304;
 89.6408 +        int i6305;
 89.6409 +        int i6306;
 89.6410 +        int i6307;
 89.6411 +        int i6308;
 89.6412 +        int i6309;
 89.6413 +        int i6310;
 89.6414 +        int i6311;
 89.6415 +        int i6312;
 89.6416 +        int i6313;
 89.6417 +        int i6314;
 89.6418 +        int i6315;
 89.6419 +        int i6316;
 89.6420 +        int i6317;
 89.6421 +        int i6318;
 89.6422 +        int i6319;
 89.6423 +        int i6320;
 89.6424 +        int i6321;
 89.6425 +        int i6322;
 89.6426 +        int i6323;
 89.6427 +        int i6324;
 89.6428 +        int i6325;
 89.6429 +        int i6326;
 89.6430 +        int i6327;
 89.6431 +        int i6328;
 89.6432 +        int i6329;
 89.6433 +        int i6330;
 89.6434 +        int i6331;
 89.6435 +        int i6332;
 89.6436 +        int i6333;
 89.6437 +        int i6334;
 89.6438 +        int i6335;
 89.6439 +        int i6336;
 89.6440 +        int i6337;
 89.6441 +        int i6338;
 89.6442 +        int i6339;
 89.6443 +        int i6340;
 89.6444 +        int i6341;
 89.6445 +        int i6342;
 89.6446 +        int i6343;
 89.6447 +        int i6344;
 89.6448 +        int i6345;
 89.6449 +        int i6346;
 89.6450 +        int i6347;
 89.6451 +        int i6348;
 89.6452 +        int i6349;
 89.6453 +        int i6350;
 89.6454 +        int i6351;
 89.6455 +        int i6352;
 89.6456 +        int i6353;
 89.6457 +        int i6354;
 89.6458 +        int i6355;
 89.6459 +        int i6356;
 89.6460 +        int i6357;
 89.6461 +        int i6358;
 89.6462 +        int i6359;
 89.6463 +        int i6360;
 89.6464 +        int i6361;
 89.6465 +        int i6362;
 89.6466 +        int i6363;
 89.6467 +        int i6364;
 89.6468 +        int i6365;
 89.6469 +        int i6366;
 89.6470 +        int i6367;
 89.6471 +        int i6368;
 89.6472 +        int i6369;
 89.6473 +        int i6370;
 89.6474 +        int i6371;
 89.6475 +        int i6372;
 89.6476 +        int i6373;
 89.6477 +        int i6374;
 89.6478 +        int i6375;
 89.6479 +        int i6376;
 89.6480 +        int i6377;
 89.6481 +        int i6378;
 89.6482 +        int i6379;
 89.6483 +        int i6380;
 89.6484 +        int i6381;
 89.6485 +        int i6382;
 89.6486 +        int i6383;
 89.6487 +        int i6384;
 89.6488 +        int i6385;
 89.6489 +        int i6386;
 89.6490 +        int i6387;
 89.6491 +        int i6388;
 89.6492 +        int i6389;
 89.6493 +        int i6390;
 89.6494 +        int i6391;
 89.6495 +        int i6392;
 89.6496 +        int i6393;
 89.6497 +        int i6394;
 89.6498 +        int i6395;
 89.6499 +        int i6396;
 89.6500 +        int i6397;
 89.6501 +        int i6398;
 89.6502 +        int i6399;
 89.6503 +        int i6400;
 89.6504 +        int i6401;
 89.6505 +        int i6402;
 89.6506 +        int i6403;
 89.6507 +        int i6404;
 89.6508 +        int i6405;
 89.6509 +        int i6406;
 89.6510 +        int i6407;
 89.6511 +        int i6408;
 89.6512 +        int i6409;
 89.6513 +        int i6410;
 89.6514 +        int i6411;
 89.6515 +        int i6412;
 89.6516 +        int i6413;
 89.6517 +        int i6414;
 89.6518 +        int i6415;
 89.6519 +        int i6416;
 89.6520 +        int i6417;
 89.6521 +        int i6418;
 89.6522 +        int i6419;
 89.6523 +        int i6420;
 89.6524 +        int i6421;
 89.6525 +        int i6422;
 89.6526 +        int i6423;
 89.6527 +        int i6424;
 89.6528 +        int i6425;
 89.6529 +        int i6426;
 89.6530 +        int i6427;
 89.6531 +        int i6428;
 89.6532 +        int i6429;
 89.6533 +        int i6430;
 89.6534 +        int i6431;
 89.6535 +        int i6432;
 89.6536 +        int i6433;
 89.6537 +        int i6434;
 89.6538 +        int i6435;
 89.6539 +        int i6436;
 89.6540 +        int i6437;
 89.6541 +        int i6438;
 89.6542 +        int i6439;
 89.6543 +        int i6440;
 89.6544 +        int i6441;
 89.6545 +        int i6442;
 89.6546 +        int i6443;
 89.6547 +        int i6444;
 89.6548 +        int i6445;
 89.6549 +        int i6446;
 89.6550 +        int i6447;
 89.6551 +        int i6448;
 89.6552 +        int i6449;
 89.6553 +        int i6450;
 89.6554 +        int i6451;
 89.6555 +        int i6452;
 89.6556 +        int i6453;
 89.6557 +        int i6454;
 89.6558 +        int i6455;
 89.6559 +        int i6456;
 89.6560 +        int i6457;
 89.6561 +        int i6458;
 89.6562 +        int i6459;
 89.6563 +        int i6460;
 89.6564 +        int i6461;
 89.6565 +        int i6462;
 89.6566 +        int i6463;
 89.6567 +        int i6464;
 89.6568 +        int i6465;
 89.6569 +        int i6466;
 89.6570 +        int i6467;
 89.6571 +        int i6468;
 89.6572 +        int i6469;
 89.6573 +        int i6470;
 89.6574 +        int i6471;
 89.6575 +        int i6472;
 89.6576 +        int i6473;
 89.6577 +        int i6474;
 89.6578 +        int i6475;
 89.6579 +        int i6476;
 89.6580 +        int i6477;
 89.6581 +        int i6478;
 89.6582 +        int i6479;
 89.6583 +        int i6480;
 89.6584 +        int i6481;
 89.6585 +        int i6482;
 89.6586 +        int i6483;
 89.6587 +        int i6484;
 89.6588 +        int i6485;
 89.6589 +        int i6486;
 89.6590 +        int i6487;
 89.6591 +        int i6488;
 89.6592 +        int i6489;
 89.6593 +        int i6490;
 89.6594 +        int i6491;
 89.6595 +        int i6492;
 89.6596 +        int i6493;
 89.6597 +        int i6494;
 89.6598 +        int i6495;
 89.6599 +        int i6496;
 89.6600 +        int i6497;
 89.6601 +        int i6498;
 89.6602 +        int i6499;
 89.6603 +        int i6500;
 89.6604 +        int i6501;
 89.6605 +        int i6502;
 89.6606 +        int i6503;
 89.6607 +        int i6504;
 89.6608 +        int i6505;
 89.6609 +        int i6506;
 89.6610 +        int i6507;
 89.6611 +        int i6508;
 89.6612 +        int i6509;
 89.6613 +        int i6510;
 89.6614 +        int i6511;
 89.6615 +        int i6512;
 89.6616 +        int i6513;
 89.6617 +        int i6514;
 89.6618 +        int i6515;
 89.6619 +        int i6516;
 89.6620 +        int i6517;
 89.6621 +        int i6518;
 89.6622 +        int i6519;
 89.6623 +        int i6520;
 89.6624 +        int i6521;
 89.6625 +        int i6522;
 89.6626 +        int i6523;
 89.6627 +        int i6524;
 89.6628 +        int i6525;
 89.6629 +        int i6526;
 89.6630 +        int i6527;
 89.6631 +        int i6528;
 89.6632 +        int i6529;
 89.6633 +        int i6530;
 89.6634 +        int i6531;
 89.6635 +        int i6532;
 89.6636 +        int i6533;
 89.6637 +        int i6534;
 89.6638 +        int i6535;
 89.6639 +        int i6536;
 89.6640 +        int i6537;
 89.6641 +        int i6538;
 89.6642 +        int i6539;
 89.6643 +        int i6540;
 89.6644 +        int i6541;
 89.6645 +        int i6542;
 89.6646 +        int i6543;
 89.6647 +        int i6544;
 89.6648 +        int i6545;
 89.6649 +        int i6546;
 89.6650 +        int i6547;
 89.6651 +        int i6548;
 89.6652 +        int i6549;
 89.6653 +        int i6550;
 89.6654 +        int i6551;
 89.6655 +        int i6552;
 89.6656 +        int i6553;
 89.6657 +        int i6554;
 89.6658 +        int i6555;
 89.6659 +        int i6556;
 89.6660 +        int i6557;
 89.6661 +        int i6558;
 89.6662 +        int i6559;
 89.6663 +        int i6560;
 89.6664 +        int i6561;
 89.6665 +        int i6562;
 89.6666 +        int i6563;
 89.6667 +        int i6564;
 89.6668 +        int i6565;
 89.6669 +        int i6566;
 89.6670 +        int i6567;
 89.6671 +        int i6568;
 89.6672 +        int i6569;
 89.6673 +        int i6570;
 89.6674 +        int i6571;
 89.6675 +        int i6572;
 89.6676 +        int i6573;
 89.6677 +        int i6574;
 89.6678 +        int i6575;
 89.6679 +        int i6576;
 89.6680 +        int i6577;
 89.6681 +        int i6578;
 89.6682 +        int i6579;
 89.6683 +        int i6580;
 89.6684 +        int i6581;
 89.6685 +        int i6582;
 89.6686 +        int i6583;
 89.6687 +        int i6584;
 89.6688 +        int i6585;
 89.6689 +        int i6586;
 89.6690 +        int i6587;
 89.6691 +        int i6588;
 89.6692 +        int i6589;
 89.6693 +        int i6590;
 89.6694 +        int i6591;
 89.6695 +        int i6592;
 89.6696 +        int i6593;
 89.6697 +        int i6594;
 89.6698 +        int i6595;
 89.6699 +        int i6596;
 89.6700 +        int i6597;
 89.6701 +        int i6598;
 89.6702 +        int i6599;
 89.6703 +        int i6600;
 89.6704 +        int i6601;
 89.6705 +        int i6602;
 89.6706 +        int i6603;
 89.6707 +        int i6604;
 89.6708 +        int i6605;
 89.6709 +        int i6606;
 89.6710 +        int i6607;
 89.6711 +        int i6608;
 89.6712 +        int i6609;
 89.6713 +        int i6610;
 89.6714 +        int i6611;
 89.6715 +        int i6612;
 89.6716 +        int i6613;
 89.6717 +        int i6614;
 89.6718 +        int i6615;
 89.6719 +        int i6616;
 89.6720 +        int i6617;
 89.6721 +        int i6618;
 89.6722 +        int i6619;
 89.6723 +        int i6620;
 89.6724 +        int i6621;
 89.6725 +        int i6622;
 89.6726 +        int i6623;
 89.6727 +        int i6624;
 89.6728 +        int i6625;
 89.6729 +        int i6626;
 89.6730 +        int i6627;
 89.6731 +        int i6628;
 89.6732 +        int i6629;
 89.6733 +        int i6630;
 89.6734 +        int i6631;
 89.6735 +        int i6632;
 89.6736 +        int i6633;
 89.6737 +        int i6634;
 89.6738 +        int i6635;
 89.6739 +        int i6636;
 89.6740 +        int i6637;
 89.6741 +        int i6638;
 89.6742 +        int i6639;
 89.6743 +        int i6640;
 89.6744 +        int i6641;
 89.6745 +        int i6642;
 89.6746 +        int i6643;
 89.6747 +        int i6644;
 89.6748 +        int i6645;
 89.6749 +        int i6646;
 89.6750 +        int i6647;
 89.6751 +        int i6648;
 89.6752 +        int i6649;
 89.6753 +        int i6650;
 89.6754 +        int i6651;
 89.6755 +        int i6652;
 89.6756 +        int i6653;
 89.6757 +        int i6654;
 89.6758 +        int i6655;
 89.6759 +        int i6656;
 89.6760 +        int i6657;
 89.6761 +        int i6658;
 89.6762 +        int i6659;
 89.6763 +        int i6660;
 89.6764 +        int i6661;
 89.6765 +        int i6662;
 89.6766 +        int i6663;
 89.6767 +        int i6664;
 89.6768 +        int i6665;
 89.6769 +        int i6666;
 89.6770 +        int i6667;
 89.6771 +        int i6668;
 89.6772 +        int i6669;
 89.6773 +        int i6670;
 89.6774 +        int i6671;
 89.6775 +        int i6672;
 89.6776 +        int i6673;
 89.6777 +        int i6674;
 89.6778 +        int i6675;
 89.6779 +        int i6676;
 89.6780 +        int i6677;
 89.6781 +        int i6678;
 89.6782 +        int i6679;
 89.6783 +        int i6680;
 89.6784 +        int i6681;
 89.6785 +        int i6682;
 89.6786 +        int i6683;
 89.6787 +        int i6684;
 89.6788 +        int i6685;
 89.6789 +        int i6686;
 89.6790 +        int i6687;
 89.6791 +        int i6688;
 89.6792 +        int i6689;
 89.6793 +        int i6690;
 89.6794 +        int i6691;
 89.6795 +        int i6692;
 89.6796 +        int i6693;
 89.6797 +        int i6694;
 89.6798 +        int i6695;
 89.6799 +        int i6696;
 89.6800 +        int i6697;
 89.6801 +        int i6698;
 89.6802 +        int i6699;
 89.6803 +        int i6700;
 89.6804 +        int i6701;
 89.6805 +        int i6702;
 89.6806 +        int i6703;
 89.6807 +        int i6704;
 89.6808 +        int i6705;
 89.6809 +        int i6706;
 89.6810 +        int i6707;
 89.6811 +        int i6708;
 89.6812 +        int i6709;
 89.6813 +        int i6710;
 89.6814 +        int i6711;
 89.6815 +        int i6712;
 89.6816 +        int i6713;
 89.6817 +        int i6714;
 89.6818 +        int i6715;
 89.6819 +        int i6716;
 89.6820 +        int i6717;
 89.6821 +        int i6718;
 89.6822 +        int i6719;
 89.6823 +        int i6720;
 89.6824 +        int i6721;
 89.6825 +        int i6722;
 89.6826 +        int i6723;
 89.6827 +        int i6724;
 89.6828 +        int i6725;
 89.6829 +        int i6726;
 89.6830 +        int i6727;
 89.6831 +        int i6728;
 89.6832 +        int i6729;
 89.6833 +        int i6730;
 89.6834 +        int i6731;
 89.6835 +        int i6732;
 89.6836 +        int i6733;
 89.6837 +        int i6734;
 89.6838 +        int i6735;
 89.6839 +        int i6736;
 89.6840 +        int i6737;
 89.6841 +        int i6738;
 89.6842 +        int i6739;
 89.6843 +        int i6740;
 89.6844 +        int i6741;
 89.6845 +        int i6742;
 89.6846 +        int i6743;
 89.6847 +        int i6744;
 89.6848 +        int i6745;
 89.6849 +        int i6746;
 89.6850 +        int i6747;
 89.6851 +        int i6748;
 89.6852 +        int i6749;
 89.6853 +        int i6750;
 89.6854 +        int i6751;
 89.6855 +        int i6752;
 89.6856 +        int i6753;
 89.6857 +        int i6754;
 89.6858 +        int i6755;
 89.6859 +        int i6756;
 89.6860 +        int i6757;
 89.6861 +        int i6758;
 89.6862 +        int i6759;
 89.6863 +        int i6760;
 89.6864 +        int i6761;
 89.6865 +        int i6762;
 89.6866 +        int i6763;
 89.6867 +        int i6764;
 89.6868 +        int i6765;
 89.6869 +        int i6766;
 89.6870 +        int i6767;
 89.6871 +        int i6768;
 89.6872 +        int i6769;
 89.6873 +        int i6770;
 89.6874 +        int i6771;
 89.6875 +        int i6772;
 89.6876 +        int i6773;
 89.6877 +        int i6774;
 89.6878 +        int i6775;
 89.6879 +        int i6776;
 89.6880 +        int i6777;
 89.6881 +        int i6778;
 89.6882 +        int i6779;
 89.6883 +        int i6780;
 89.6884 +        int i6781;
 89.6885 +        int i6782;
 89.6886 +        int i6783;
 89.6887 +        int i6784;
 89.6888 +        int i6785;
 89.6889 +        int i6786;
 89.6890 +        int i6787;
 89.6891 +        int i6788;
 89.6892 +        int i6789;
 89.6893 +        int i6790;
 89.6894 +        int i6791;
 89.6895 +        int i6792;
 89.6896 +        int i6793;
 89.6897 +        int i6794;
 89.6898 +        int i6795;
 89.6899 +        int i6796;
 89.6900 +        int i6797;
 89.6901 +        int i6798;
 89.6902 +        int i6799;
 89.6903 +        int i6800;
 89.6904 +        int i6801;
 89.6905 +        int i6802;
 89.6906 +        int i6803;
 89.6907 +        int i6804;
 89.6908 +        int i6805;
 89.6909 +        int i6806;
 89.6910 +        int i6807;
 89.6911 +        int i6808;
 89.6912 +        int i6809;
 89.6913 +        int i6810;
 89.6914 +        int i6811;
 89.6915 +        int i6812;
 89.6916 +        int i6813;
 89.6917 +        int i6814;
 89.6918 +        int i6815;
 89.6919 +        int i6816;
 89.6920 +        int i6817;
 89.6921 +        int i6818;
 89.6922 +        int i6819;
 89.6923 +        int i6820;
 89.6924 +        int i6821;
 89.6925 +        int i6822;
 89.6926 +        int i6823;
 89.6927 +        int i6824;
 89.6928 +        int i6825;
 89.6929 +        int i6826;
 89.6930 +        int i6827;
 89.6931 +        int i6828;
 89.6932 +        int i6829;
 89.6933 +        int i6830;
 89.6934 +        int i6831;
 89.6935 +        int i6832;
 89.6936 +        int i6833;
 89.6937 +        int i6834;
 89.6938 +        int i6835;
 89.6939 +        int i6836;
 89.6940 +        int i6837;
 89.6941 +        int i6838;
 89.6942 +        int i6839;
 89.6943 +        int i6840;
 89.6944 +        int i6841;
 89.6945 +        int i6842;
 89.6946 +        int i6843;
 89.6947 +        int i6844;
 89.6948 +        int i6845;
 89.6949 +        int i6846;
 89.6950 +        int i6847;
 89.6951 +        int i6848;
 89.6952 +        int i6849;
 89.6953 +        int i6850;
 89.6954 +        int i6851;
 89.6955 +        int i6852;
 89.6956 +        int i6853;
 89.6957 +        int i6854;
 89.6958 +        int i6855;
 89.6959 +        int i6856;
 89.6960 +        int i6857;
 89.6961 +        int i6858;
 89.6962 +        int i6859;
 89.6963 +        int i6860;
 89.6964 +        int i6861;
 89.6965 +        int i6862;
 89.6966 +        int i6863;
 89.6967 +        int i6864;
 89.6968 +        int i6865;
 89.6969 +        int i6866;
 89.6970 +        int i6867;
 89.6971 +        int i6868;
 89.6972 +        int i6869;
 89.6973 +        int i6870;
 89.6974 +        int i6871;
 89.6975 +        int i6872;
 89.6976 +        int i6873;
 89.6977 +        int i6874;
 89.6978 +        int i6875;
 89.6979 +        int i6876;
 89.6980 +        int i6877;
 89.6981 +        int i6878;
 89.6982 +        int i6879;
 89.6983 +        int i6880;
 89.6984 +        int i6881;
 89.6985 +        int i6882;
 89.6986 +        int i6883;
 89.6987 +        int i6884;
 89.6988 +        int i6885;
 89.6989 +        int i6886;
 89.6990 +        int i6887;
 89.6991 +        int i6888;
 89.6992 +        int i6889;
 89.6993 +        int i6890;
 89.6994 +        int i6891;
 89.6995 +        int i6892;
 89.6996 +        int i6893;
 89.6997 +        int i6894;
 89.6998 +        int i6895;
 89.6999 +        int i6896;
 89.7000 +        int i6897;
 89.7001 +        int i6898;
 89.7002 +        int i6899;
 89.7003 +        int i6900;
 89.7004 +        int i6901;
 89.7005 +        int i6902;
 89.7006 +        int i6903;
 89.7007 +        int i6904;
 89.7008 +        int i6905;
 89.7009 +        int i6906;
 89.7010 +        int i6907;
 89.7011 +        int i6908;
 89.7012 +        int i6909;
 89.7013 +        int i6910;
 89.7014 +        int i6911;
 89.7015 +        int i6912;
 89.7016 +        int i6913;
 89.7017 +        int i6914;
 89.7018 +        int i6915;
 89.7019 +        int i6916;
 89.7020 +        int i6917;
 89.7021 +        int i6918;
 89.7022 +        int i6919;
 89.7023 +        int i6920;
 89.7024 +        int i6921;
 89.7025 +        int i6922;
 89.7026 +        int i6923;
 89.7027 +        int i6924;
 89.7028 +        int i6925;
 89.7029 +        int i6926;
 89.7030 +        int i6927;
 89.7031 +        int i6928;
 89.7032 +        int i6929;
 89.7033 +        int i6930;
 89.7034 +        int i6931;
 89.7035 +        int i6932;
 89.7036 +        int i6933;
 89.7037 +        int i6934;
 89.7038 +        int i6935;
 89.7039 +        int i6936;
 89.7040 +        int i6937;
 89.7041 +        int i6938;
 89.7042 +        int i6939;
 89.7043 +        int i6940;
 89.7044 +        int i6941;
 89.7045 +        int i6942;
 89.7046 +        int i6943;
 89.7047 +        int i6944;
 89.7048 +        int i6945;
 89.7049 +        int i6946;
 89.7050 +        int i6947;
 89.7051 +        int i6948;
 89.7052 +        int i6949;
 89.7053 +        int i6950;
 89.7054 +        int i6951;
 89.7055 +        int i6952;
 89.7056 +        int i6953;
 89.7057 +        int i6954;
 89.7058 +        int i6955;
 89.7059 +        int i6956;
 89.7060 +        int i6957;
 89.7061 +        int i6958;
 89.7062 +        int i6959;
 89.7063 +        int i6960;
 89.7064 +        int i6961;
 89.7065 +        int i6962;
 89.7066 +        int i6963;
 89.7067 +        int i6964;
 89.7068 +        int i6965;
 89.7069 +        int i6966;
 89.7070 +        int i6967;
 89.7071 +        int i6968;
 89.7072 +        int i6969;
 89.7073 +        int i6970;
 89.7074 +        int i6971;
 89.7075 +        int i6972;
 89.7076 +        int i6973;
 89.7077 +        int i6974;
 89.7078 +        int i6975;
 89.7079 +        int i6976;
 89.7080 +        int i6977;
 89.7081 +        int i6978;
 89.7082 +        int i6979;
 89.7083 +        int i6980;
 89.7084 +        int i6981;
 89.7085 +        int i6982;
 89.7086 +        int i6983;
 89.7087 +        int i6984;
 89.7088 +        int i6985;
 89.7089 +        int i6986;
 89.7090 +        int i6987;
 89.7091 +        int i6988;
 89.7092 +        int i6989;
 89.7093 +        int i6990;
 89.7094 +        int i6991;
 89.7095 +        int i6992;
 89.7096 +        int i6993;
 89.7097 +        int i6994;
 89.7098 +        int i6995;
 89.7099 +        int i6996;
 89.7100 +        int i6997;
 89.7101 +        int i6998;
 89.7102 +        int i6999;
 89.7103 +        int i7000;
 89.7104 +        int i7001;
 89.7105 +        int i7002;
 89.7106 +        int i7003;
 89.7107 +        int i7004;
 89.7108 +        int i7005;
 89.7109 +        int i7006;
 89.7110 +        int i7007;
 89.7111 +        int i7008;
 89.7112 +        int i7009;
 89.7113 +        int i7010;
 89.7114 +        int i7011;
 89.7115 +        int i7012;
 89.7116 +        int i7013;
 89.7117 +        int i7014;
 89.7118 +        int i7015;
 89.7119 +        int i7016;
 89.7120 +        int i7017;
 89.7121 +        int i7018;
 89.7122 +        int i7019;
 89.7123 +        int i7020;
 89.7124 +        int i7021;
 89.7125 +        int i7022;
 89.7126 +        int i7023;
 89.7127 +        int i7024;
 89.7128 +        int i7025;
 89.7129 +        int i7026;
 89.7130 +        int i7027;
 89.7131 +        int i7028;
 89.7132 +        int i7029;
 89.7133 +        int i7030;
 89.7134 +        int i7031;
 89.7135 +        int i7032;
 89.7136 +        int i7033;
 89.7137 +        int i7034;
 89.7138 +        int i7035;
 89.7139 +        int i7036;
 89.7140 +        int i7037;
 89.7141 +        int i7038;
 89.7142 +        int i7039;
 89.7143 +        int i7040;
 89.7144 +        int i7041;
 89.7145 +        int i7042;
 89.7146 +        int i7043;
 89.7147 +        int i7044;
 89.7148 +        int i7045;
 89.7149 +        int i7046;
 89.7150 +        int i7047;
 89.7151 +        int i7048;
 89.7152 +        int i7049;
 89.7153 +        int i7050;
 89.7154 +        int i7051;
 89.7155 +        int i7052;
 89.7156 +        int i7053;
 89.7157 +        int i7054;
 89.7158 +        int i7055;
 89.7159 +        int i7056;
 89.7160 +        int i7057;
 89.7161 +        int i7058;
 89.7162 +        int i7059;
 89.7163 +        int i7060;
 89.7164 +        int i7061;
 89.7165 +        int i7062;
 89.7166 +        int i7063;
 89.7167 +        int i7064;
 89.7168 +        int i7065;
 89.7169 +        int i7066;
 89.7170 +        int i7067;
 89.7171 +        int i7068;
 89.7172 +        int i7069;
 89.7173 +        int i7070;
 89.7174 +        int i7071;
 89.7175 +        int i7072;
 89.7176 +        int i7073;
 89.7177 +        int i7074;
 89.7178 +        int i7075;
 89.7179 +        int i7076;
 89.7180 +        int i7077;
 89.7181 +        int i7078;
 89.7182 +        int i7079;
 89.7183 +        int i7080;
 89.7184 +        int i7081;
 89.7185 +        int i7082;
 89.7186 +        int i7083;
 89.7187 +        int i7084;
 89.7188 +        int i7085;
 89.7189 +        int i7086;
 89.7190 +        int i7087;
 89.7191 +        int i7088;
 89.7192 +        int i7089;
 89.7193 +        int i7090;
 89.7194 +        int i7091;
 89.7195 +        int i7092;
 89.7196 +        int i7093;
 89.7197 +        int i7094;
 89.7198 +        int i7095;
 89.7199 +        int i7096;
 89.7200 +        int i7097;
 89.7201 +        int i7098;
 89.7202 +        int i7099;
 89.7203 +        int i7100;
 89.7204 +        int i7101;
 89.7205 +        int i7102;
 89.7206 +        int i7103;
 89.7207 +        int i7104;
 89.7208 +        int i7105;
 89.7209 +        int i7106;
 89.7210 +        int i7107;
 89.7211 +        int i7108;
 89.7212 +        int i7109;
 89.7213 +        int i7110;
 89.7214 +        int i7111;
 89.7215 +        int i7112;
 89.7216 +        int i7113;
 89.7217 +        int i7114;
 89.7218 +        int i7115;
 89.7219 +        int i7116;
 89.7220 +        int i7117;
 89.7221 +        int i7118;
 89.7222 +        int i7119;
 89.7223 +        int i7120;
 89.7224 +        int i7121;
 89.7225 +        int i7122;
 89.7226 +        int i7123;
 89.7227 +        int i7124;
 89.7228 +        int i7125;
 89.7229 +        int i7126;
 89.7230 +        int i7127;
 89.7231 +        int i7128;
 89.7232 +        int i7129;
 89.7233 +        int i7130;
 89.7234 +        int i7131;
 89.7235 +        int i7132;
 89.7236 +        int i7133;
 89.7237 +        int i7134;
 89.7238 +        int i7135;
 89.7239 +        int i7136;
 89.7240 +        int i7137;
 89.7241 +        int i7138;
 89.7242 +        int i7139;
 89.7243 +        int i7140;
 89.7244 +        int i7141;
 89.7245 +        int i7142;
 89.7246 +        int i7143;
 89.7247 +        int i7144;
 89.7248 +        int i7145;
 89.7249 +        int i7146;
 89.7250 +        int i7147;
 89.7251 +        int i7148;
 89.7252 +        int i7149;
 89.7253 +        int i7150;
 89.7254 +        int i7151;
 89.7255 +        int i7152;
 89.7256 +        int i7153;
 89.7257 +        int i7154;
 89.7258 +        int i7155;
 89.7259 +        int i7156;
 89.7260 +        int i7157;
 89.7261 +        int i7158;
 89.7262 +        int i7159;
 89.7263 +        int i7160;
 89.7264 +        int i7161;
 89.7265 +        int i7162;
 89.7266 +        int i7163;
 89.7267 +        int i7164;
 89.7268 +        int i7165;
 89.7269 +        int i7166;
 89.7270 +        int i7167;
 89.7271 +        int i7168;
 89.7272 +        int i7169;
 89.7273 +        int i7170;
 89.7274 +        int i7171;
 89.7275 +        int i7172;
 89.7276 +        int i7173;
 89.7277 +        int i7174;
 89.7278 +        int i7175;
 89.7279 +        int i7176;
 89.7280 +        int i7177;
 89.7281 +        int i7178;
 89.7282 +        int i7179;
 89.7283 +        int i7180;
 89.7284 +        int i7181;
 89.7285 +        int i7182;
 89.7286 +        int i7183;
 89.7287 +        int i7184;
 89.7288 +        int i7185;
 89.7289 +        int i7186;
 89.7290 +        int i7187;
 89.7291 +        int i7188;
 89.7292 +        int i7189;
 89.7293 +        int i7190;
 89.7294 +        int i7191;
 89.7295 +        int i7192;
 89.7296 +        int i7193;
 89.7297 +        int i7194;
 89.7298 +        int i7195;
 89.7299 +        int i7196;
 89.7300 +        int i7197;
 89.7301 +        int i7198;
 89.7302 +        int i7199;
 89.7303 +        int i7200;
 89.7304 +        int i7201;
 89.7305 +        int i7202;
 89.7306 +        int i7203;
 89.7307 +        int i7204;
 89.7308 +        int i7205;
 89.7309 +        int i7206;
 89.7310 +        int i7207;
 89.7311 +        int i7208;
 89.7312 +        int i7209;
 89.7313 +        int i7210;
 89.7314 +        int i7211;
 89.7315 +        int i7212;
 89.7316 +        int i7213;
 89.7317 +        int i7214;
 89.7318 +        int i7215;
 89.7319 +        int i7216;
 89.7320 +        int i7217;
 89.7321 +        int i7218;
 89.7322 +        int i7219;
 89.7323 +        int i7220;
 89.7324 +        int i7221;
 89.7325 +        int i7222;
 89.7326 +        int i7223;
 89.7327 +        int i7224;
 89.7328 +        int i7225;
 89.7329 +        int i7226;
 89.7330 +        int i7227;
 89.7331 +        int i7228;
 89.7332 +        int i7229;
 89.7333 +        int i7230;
 89.7334 +        int i7231;
 89.7335 +        int i7232;
 89.7336 +        int i7233;
 89.7337 +        int i7234;
 89.7338 +        int i7235;
 89.7339 +        int i7236;
 89.7340 +        int i7237;
 89.7341 +        int i7238;
 89.7342 +        int i7239;
 89.7343 +        int i7240;
 89.7344 +        int i7241;
 89.7345 +        int i7242;
 89.7346 +        int i7243;
 89.7347 +        int i7244;
 89.7348 +        int i7245;
 89.7349 +        int i7246;
 89.7350 +        int i7247;
 89.7351 +        int i7248;
 89.7352 +        int i7249;
 89.7353 +        int i7250;
 89.7354 +        int i7251;
 89.7355 +        int i7252;
 89.7356 +        int i7253;
 89.7357 +        int i7254;
 89.7358 +        int i7255;
 89.7359 +        int i7256;
 89.7360 +        int i7257;
 89.7361 +        int i7258;
 89.7362 +        int i7259;
 89.7363 +        int i7260;
 89.7364 +        int i7261;
 89.7365 +        int i7262;
 89.7366 +        int i7263;
 89.7367 +        int i7264;
 89.7368 +        int i7265;
 89.7369 +        int i7266;
 89.7370 +        int i7267;
 89.7371 +        int i7268;
 89.7372 +        int i7269;
 89.7373 +        int i7270;
 89.7374 +        int i7271;
 89.7375 +        int i7272;
 89.7376 +        int i7273;
 89.7377 +        int i7274;
 89.7378 +        int i7275;
 89.7379 +        int i7276;
 89.7380 +        int i7277;
 89.7381 +        int i7278;
 89.7382 +        int i7279;
 89.7383 +        int i7280;
 89.7384 +        int i7281;
 89.7385 +        int i7282;
 89.7386 +        int i7283;
 89.7387 +        int i7284;
 89.7388 +        int i7285;
 89.7389 +        int i7286;
 89.7390 +        int i7287;
 89.7391 +        int i7288;
 89.7392 +        int i7289;
 89.7393 +        int i7290;
 89.7394 +        int i7291;
 89.7395 +        int i7292;
 89.7396 +        int i7293;
 89.7397 +        int i7294;
 89.7398 +        int i7295;
 89.7399 +        int i7296;
 89.7400 +        int i7297;
 89.7401 +        int i7298;
 89.7402 +        int i7299;
 89.7403 +        int i7300;
 89.7404 +        int i7301;
 89.7405 +        int i7302;
 89.7406 +        int i7303;
 89.7407 +        int i7304;
 89.7408 +        int i7305;
 89.7409 +        int i7306;
 89.7410 +        int i7307;
 89.7411 +        int i7308;
 89.7412 +        int i7309;
 89.7413 +        int i7310;
 89.7414 +        int i7311;
 89.7415 +        int i7312;
 89.7416 +        int i7313;
 89.7417 +        int i7314;
 89.7418 +        int i7315;
 89.7419 +        int i7316;
 89.7420 +        int i7317;
 89.7421 +        int i7318;
 89.7422 +        int i7319;
 89.7423 +        int i7320;
 89.7424 +        int i7321;
 89.7425 +        int i7322;
 89.7426 +        int i7323;
 89.7427 +        int i7324;
 89.7428 +        int i7325;
 89.7429 +        int i7326;
 89.7430 +        int i7327;
 89.7431 +        int i7328;
 89.7432 +        int i7329;
 89.7433 +        int i7330;
 89.7434 +        int i7331;
 89.7435 +        int i7332;
 89.7436 +        int i7333;
 89.7437 +        int i7334;
 89.7438 +        int i7335;
 89.7439 +        int i7336;
 89.7440 +        int i7337;
 89.7441 +        int i7338;
 89.7442 +        int i7339;
 89.7443 +        int i7340;
 89.7444 +        int i7341;
 89.7445 +        int i7342;
 89.7446 +        int i7343;
 89.7447 +        int i7344;
 89.7448 +        int i7345;
 89.7449 +        int i7346;
 89.7450 +        int i7347;
 89.7451 +        int i7348;
 89.7452 +        int i7349;
 89.7453 +        int i7350;
 89.7454 +        int i7351;
 89.7455 +        int i7352;
 89.7456 +        int i7353;
 89.7457 +        int i7354;
 89.7458 +        int i7355;
 89.7459 +        int i7356;
 89.7460 +        int i7357;
 89.7461 +        int i7358;
 89.7462 +        int i7359;
 89.7463 +        int i7360;
 89.7464 +        int i7361;
 89.7465 +        int i7362;
 89.7466 +        int i7363;
 89.7467 +        int i7364;
 89.7468 +        int i7365;
 89.7469 +        int i7366;
 89.7470 +        int i7367;
 89.7471 +        int i7368;
 89.7472 +        int i7369;
 89.7473 +        int i7370;
 89.7474 +        int i7371;
 89.7475 +        int i7372;
 89.7476 +        int i7373;
 89.7477 +        int i7374;
 89.7478 +        int i7375;
 89.7479 +        int i7376;
 89.7480 +        int i7377;
 89.7481 +        int i7378;
 89.7482 +        int i7379;
 89.7483 +        int i7380;
 89.7484 +        int i7381;
 89.7485 +        int i7382;
 89.7486 +        int i7383;
 89.7487 +        int i7384;
 89.7488 +        int i7385;
 89.7489 +        int i7386;
 89.7490 +        int i7387;
 89.7491 +        int i7388;
 89.7492 +        int i7389;
 89.7493 +        int i7390;
 89.7494 +        int i7391;
 89.7495 +        int i7392;
 89.7496 +        int i7393;
 89.7497 +        int i7394;
 89.7498 +        int i7395;
 89.7499 +        int i7396;
 89.7500 +        int i7397;
 89.7501 +        int i7398;
 89.7502 +        int i7399;
 89.7503 +        int i7400;
 89.7504 +        int i7401;
 89.7505 +        int i7402;
 89.7506 +        int i7403;
 89.7507 +        int i7404;
 89.7508 +        int i7405;
 89.7509 +        int i7406;
 89.7510 +        int i7407;
 89.7511 +        int i7408;
 89.7512 +        int i7409;
 89.7513 +        int i7410;
 89.7514 +        int i7411;
 89.7515 +        int i7412;
 89.7516 +        int i7413;
 89.7517 +        int i7414;
 89.7518 +        int i7415;
 89.7519 +        int i7416;
 89.7520 +        int i7417;
 89.7521 +        int i7418;
 89.7522 +        int i7419;
 89.7523 +        int i7420;
 89.7524 +        int i7421;
 89.7525 +        int i7422;
 89.7526 +        int i7423;
 89.7527 +        int i7424;
 89.7528 +        int i7425;
 89.7529 +        int i7426;
 89.7530 +        int i7427;
 89.7531 +        int i7428;
 89.7532 +        int i7429;
 89.7533 +        int i7430;
 89.7534 +        int i7431;
 89.7535 +        int i7432;
 89.7536 +        int i7433;
 89.7537 +        int i7434;
 89.7538 +        int i7435;
 89.7539 +        int i7436;
 89.7540 +        int i7437;
 89.7541 +        int i7438;
 89.7542 +        int i7439;
 89.7543 +        int i7440;
 89.7544 +        int i7441;
 89.7545 +        int i7442;
 89.7546 +        int i7443;
 89.7547 +        int i7444;
 89.7548 +        int i7445;
 89.7549 +        int i7446;
 89.7550 +        int i7447;
 89.7551 +        int i7448;
 89.7552 +        int i7449;
 89.7553 +        int i7450;
 89.7554 +        int i7451;
 89.7555 +        int i7452;
 89.7556 +        int i7453;
 89.7557 +        int i7454;
 89.7558 +        int i7455;
 89.7559 +        int i7456;
 89.7560 +        int i7457;
 89.7561 +        int i7458;
 89.7562 +        int i7459;
 89.7563 +        int i7460;
 89.7564 +        int i7461;
 89.7565 +        int i7462;
 89.7566 +        int i7463;
 89.7567 +        int i7464;
 89.7568 +        int i7465;
 89.7569 +        int i7466;
 89.7570 +        int i7467;
 89.7571 +        int i7468;
 89.7572 +        int i7469;
 89.7573 +        int i7470;
 89.7574 +        int i7471;
 89.7575 +        int i7472;
 89.7576 +        int i7473;
 89.7577 +        int i7474;
 89.7578 +        int i7475;
 89.7579 +        int i7476;
 89.7580 +        int i7477;
 89.7581 +        int i7478;
 89.7582 +        int i7479;
 89.7583 +        int i7480;
 89.7584 +        int i7481;
 89.7585 +        int i7482;
 89.7586 +        int i7483;
 89.7587 +        int i7484;
 89.7588 +        int i7485;
 89.7589 +        int i7486;
 89.7590 +        int i7487;
 89.7591 +        int i7488;
 89.7592 +        int i7489;
 89.7593 +        int i7490;
 89.7594 +        int i7491;
 89.7595 +        int i7492;
 89.7596 +        int i7493;
 89.7597 +        int i7494;
 89.7598 +        int i7495;
 89.7599 +        int i7496;
 89.7600 +        int i7497;
 89.7601 +        int i7498;
 89.7602 +        int i7499;
 89.7603 +        int i7500;
 89.7604 +        int i7501;
 89.7605 +        int i7502;
 89.7606 +        int i7503;
 89.7607 +        int i7504;
 89.7608 +        int i7505;
 89.7609 +        int i7506;
 89.7610 +        int i7507;
 89.7611 +        int i7508;
 89.7612 +        int i7509;
 89.7613 +        int i7510;
 89.7614 +        int i7511;
 89.7615 +        int i7512;
 89.7616 +        int i7513;
 89.7617 +        int i7514;
 89.7618 +        int i7515;
 89.7619 +        int i7516;
 89.7620 +        int i7517;
 89.7621 +        int i7518;
 89.7622 +        int i7519;
 89.7623 +        int i7520;
 89.7624 +        int i7521;
 89.7625 +        int i7522;
 89.7626 +        int i7523;
 89.7627 +        int i7524;
 89.7628 +        int i7525;
 89.7629 +        int i7526;
 89.7630 +        int i7527;
 89.7631 +        int i7528;
 89.7632 +        int i7529;
 89.7633 +        int i7530;
 89.7634 +        int i7531;
 89.7635 +        int i7532;
 89.7636 +        int i7533;
 89.7637 +        int i7534;
 89.7638 +        int i7535;
 89.7639 +        int i7536;
 89.7640 +        int i7537;
 89.7641 +        int i7538;
 89.7642 +        int i7539;
 89.7643 +        int i7540;
 89.7644 +        int i7541;
 89.7645 +        int i7542;
 89.7646 +        int i7543;
 89.7647 +        int i7544;
 89.7648 +        int i7545;
 89.7649 +        int i7546;
 89.7650 +        int i7547;
 89.7651 +        int i7548;
 89.7652 +        int i7549;
 89.7653 +        int i7550;
 89.7654 +        int i7551;
 89.7655 +        int i7552;
 89.7656 +        int i7553;
 89.7657 +        int i7554;
 89.7658 +        int i7555;
 89.7659 +        int i7556;
 89.7660 +        int i7557;
 89.7661 +        int i7558;
 89.7662 +        int i7559;
 89.7663 +        int i7560;
 89.7664 +        int i7561;
 89.7665 +        int i7562;
 89.7666 +        int i7563;
 89.7667 +        int i7564;
 89.7668 +        int i7565;
 89.7669 +        int i7566;
 89.7670 +        int i7567;
 89.7671 +        int i7568;
 89.7672 +        int i7569;
 89.7673 +        int i7570;
 89.7674 +        int i7571;
 89.7675 +        int i7572;
 89.7676 +        int i7573;
 89.7677 +        int i7574;
 89.7678 +        int i7575;
 89.7679 +        int i7576;
 89.7680 +        int i7577;
 89.7681 +        int i7578;
 89.7682 +        int i7579;
 89.7683 +        int i7580;
 89.7684 +        int i7581;
 89.7685 +        int i7582;
 89.7686 +        int i7583;
 89.7687 +        int i7584;
 89.7688 +        int i7585;
 89.7689 +        int i7586;
 89.7690 +        int i7587;
 89.7691 +        int i7588;
 89.7692 +        int i7589;
 89.7693 +        int i7590;
 89.7694 +        int i7591;
 89.7695 +        int i7592;
 89.7696 +        int i7593;
 89.7697 +        int i7594;
 89.7698 +        int i7595;
 89.7699 +        int i7596;
 89.7700 +        int i7597;
 89.7701 +        int i7598;
 89.7702 +        int i7599;
 89.7703 +        int i7600;
 89.7704 +        int i7601;
 89.7705 +        int i7602;
 89.7706 +        int i7603;
 89.7707 +        int i7604;
 89.7708 +        int i7605;
 89.7709 +        int i7606;
 89.7710 +        int i7607;
 89.7711 +        int i7608;
 89.7712 +        int i7609;
 89.7713 +        int i7610;
 89.7714 +        int i7611;
 89.7715 +        int i7612;
 89.7716 +        int i7613;
 89.7717 +        int i7614;
 89.7718 +        int i7615;
 89.7719 +        int i7616;
 89.7720 +        int i7617;
 89.7721 +        int i7618;
 89.7722 +        int i7619;
 89.7723 +        int i7620;
 89.7724 +        int i7621;
 89.7725 +        int i7622;
 89.7726 +        int i7623;
 89.7727 +        int i7624;
 89.7728 +        int i7625;
 89.7729 +        int i7626;
 89.7730 +        int i7627;
 89.7731 +        int i7628;
 89.7732 +        int i7629;
 89.7733 +        int i7630;
 89.7734 +        int i7631;
 89.7735 +        int i7632;
 89.7736 +        int i7633;
 89.7737 +        int i7634;
 89.7738 +        int i7635;
 89.7739 +        int i7636;
 89.7740 +        int i7637;
 89.7741 +        int i7638;
 89.7742 +        int i7639;
 89.7743 +        int i7640;
 89.7744 +        int i7641;
 89.7745 +        int i7642;
 89.7746 +        int i7643;
 89.7747 +        int i7644;
 89.7748 +        int i7645;
 89.7749 +        int i7646;
 89.7750 +        int i7647;
 89.7751 +        int i7648;
 89.7752 +        int i7649;
 89.7753 +        int i7650;
 89.7754 +        int i7651;
 89.7755 +        int i7652;
 89.7756 +        int i7653;
 89.7757 +        int i7654;
 89.7758 +        int i7655;
 89.7759 +        int i7656;
 89.7760 +        int i7657;
 89.7761 +        int i7658;
 89.7762 +        int i7659;
 89.7763 +        int i7660;
 89.7764 +        int i7661;
 89.7765 +        int i7662;
 89.7766 +        int i7663;
 89.7767 +        int i7664;
 89.7768 +        int i7665;
 89.7769 +        int i7666;
 89.7770 +        int i7667;
 89.7771 +        int i7668;
 89.7772 +        int i7669;
 89.7773 +        int i7670;
 89.7774 +        int i7671;
 89.7775 +        int i7672;
 89.7776 +        int i7673;
 89.7777 +        int i7674;
 89.7778 +        int i7675;
 89.7779 +        int i7676;
 89.7780 +        int i7677;
 89.7781 +        int i7678;
 89.7782 +        int i7679;
 89.7783 +        int i7680;
 89.7784 +        int i7681;
 89.7785 +        int i7682;
 89.7786 +        int i7683;
 89.7787 +        int i7684;
 89.7788 +        int i7685;
 89.7789 +        int i7686;
 89.7790 +        int i7687;
 89.7791 +        int i7688;
 89.7792 +        int i7689;
 89.7793 +        int i7690;
 89.7794 +        int i7691;
 89.7795 +        int i7692;
 89.7796 +        int i7693;
 89.7797 +        int i7694;
 89.7798 +        int i7695;
 89.7799 +        int i7696;
 89.7800 +        int i7697;
 89.7801 +        int i7698;
 89.7802 +        int i7699;
 89.7803 +        int i7700;
 89.7804 +        int i7701;
 89.7805 +        int i7702;
 89.7806 +        int i7703;
 89.7807 +        int i7704;
 89.7808 +        int i7705;
 89.7809 +        int i7706;
 89.7810 +        int i7707;
 89.7811 +        int i7708;
 89.7812 +        int i7709;
 89.7813 +        int i7710;
 89.7814 +        int i7711;
 89.7815 +        int i7712;
 89.7816 +        int i7713;
 89.7817 +        int i7714;
 89.7818 +        int i7715;
 89.7819 +        int i7716;
 89.7820 +        int i7717;
 89.7821 +        int i7718;
 89.7822 +        int i7719;
 89.7823 +        int i7720;
 89.7824 +        int i7721;
 89.7825 +        int i7722;
 89.7826 +        int i7723;
 89.7827 +        int i7724;
 89.7828 +        int i7725;
 89.7829 +        int i7726;
 89.7830 +        int i7727;
 89.7831 +        int i7728;
 89.7832 +        int i7729;
 89.7833 +        int i7730;
 89.7834 +        int i7731;
 89.7835 +        int i7732;
 89.7836 +        int i7733;
 89.7837 +        int i7734;
 89.7838 +        int i7735;
 89.7839 +        int i7736;
 89.7840 +        int i7737;
 89.7841 +        int i7738;
 89.7842 +        int i7739;
 89.7843 +        int i7740;
 89.7844 +        int i7741;
 89.7845 +        int i7742;
 89.7846 +        int i7743;
 89.7847 +        int i7744;
 89.7848 +        int i7745;
 89.7849 +        int i7746;
 89.7850 +        int i7747;
 89.7851 +        int i7748;
 89.7852 +        int i7749;
 89.7853 +        int i7750;
 89.7854 +        int i7751;
 89.7855 +        int i7752;
 89.7856 +        int i7753;
 89.7857 +        int i7754;
 89.7858 +        int i7755;
 89.7859 +        int i7756;
 89.7860 +        int i7757;
 89.7861 +        int i7758;
 89.7862 +        int i7759;
 89.7863 +        int i7760;
 89.7864 +        int i7761;
 89.7865 +        int i7762;
 89.7866 +        int i7763;
 89.7867 +        int i7764;
 89.7868 +        int i7765;
 89.7869 +        int i7766;
 89.7870 +        int i7767;
 89.7871 +        int i7768;
 89.7872 +        int i7769;
 89.7873 +        int i7770;
 89.7874 +        int i7771;
 89.7875 +        int i7772;
 89.7876 +        int i7773;
 89.7877 +        int i7774;
 89.7878 +        int i7775;
 89.7879 +        int i7776;
 89.7880 +        int i7777;
 89.7881 +        int i7778;
 89.7882 +        int i7779;
 89.7883 +        int i7780;
 89.7884 +        int i7781;
 89.7885 +        int i7782;
 89.7886 +        int i7783;
 89.7887 +        int i7784;
 89.7888 +        int i7785;
 89.7889 +        int i7786;
 89.7890 +        int i7787;
 89.7891 +        int i7788;
 89.7892 +        int i7789;
 89.7893 +        int i7790;
 89.7894 +        int i7791;
 89.7895 +        int i7792;
 89.7896 +        int i7793;
 89.7897 +        int i7794;
 89.7898 +        int i7795;
 89.7899 +        int i7796;
 89.7900 +        int i7797;
 89.7901 +        int i7798;
 89.7902 +        int i7799;
 89.7903 +        int i7800;
 89.7904 +        int i7801;
 89.7905 +        int i7802;
 89.7906 +        int i7803;
 89.7907 +        int i7804;
 89.7908 +        int i7805;
 89.7909 +        int i7806;
 89.7910 +        int i7807;
 89.7911 +        int i7808;
 89.7912 +        int i7809;
 89.7913 +        int i7810;
 89.7914 +        int i7811;
 89.7915 +        int i7812;
 89.7916 +        int i7813;
 89.7917 +        int i7814;
 89.7918 +        int i7815;
 89.7919 +        int i7816;
 89.7920 +        int i7817;
 89.7921 +        int i7818;
 89.7922 +        int i7819;
 89.7923 +        int i7820;
 89.7924 +        int i7821;
 89.7925 +        int i7822;
 89.7926 +        int i7823;
 89.7927 +        int i7824;
 89.7928 +        int i7825;
 89.7929 +        int i7826;
 89.7930 +        int i7827;
 89.7931 +        int i7828;
 89.7932 +        int i7829;
 89.7933 +        int i7830;
 89.7934 +        int i7831;
 89.7935 +        int i7832;
 89.7936 +        int i7833;
 89.7937 +        int i7834;
 89.7938 +        int i7835;
 89.7939 +        int i7836;
 89.7940 +        int i7837;
 89.7941 +        int i7838;
 89.7942 +        int i7839;
 89.7943 +        int i7840;
 89.7944 +        int i7841;
 89.7945 +        int i7842;
 89.7946 +        int i7843;
 89.7947 +        int i7844;
 89.7948 +        int i7845;
 89.7949 +        int i7846;
 89.7950 +        int i7847;
 89.7951 +        int i7848;
 89.7952 +        int i7849;
 89.7953 +        int i7850;
 89.7954 +        int i7851;
 89.7955 +        int i7852;
 89.7956 +        int i7853;
 89.7957 +        int i7854;
 89.7958 +        int i7855;
 89.7959 +        int i7856;
 89.7960 +        int i7857;
 89.7961 +        int i7858;
 89.7962 +        int i7859;
 89.7963 +        int i7860;
 89.7964 +        int i7861;
 89.7965 +        int i7862;
 89.7966 +        int i7863;
 89.7967 +        int i7864;
 89.7968 +        int i7865;
 89.7969 +        int i7866;
 89.7970 +        int i7867;
 89.7971 +        int i7868;
 89.7972 +        int i7869;
 89.7973 +        int i7870;
 89.7974 +        int i7871;
 89.7975 +        int i7872;
 89.7976 +        int i7873;
 89.7977 +        int i7874;
 89.7978 +        int i7875;
 89.7979 +        int i7876;
 89.7980 +        int i7877;
 89.7981 +        int i7878;
 89.7982 +        int i7879;
 89.7983 +        int i7880;
 89.7984 +        int i7881;
 89.7985 +        int i7882;
 89.7986 +        int i7883;
 89.7987 +        int i7884;
 89.7988 +        int i7885;
 89.7989 +        int i7886;
 89.7990 +        int i7887;
 89.7991 +        int i7888;
 89.7992 +        int i7889;
 89.7993 +        int i7890;
 89.7994 +        int i7891;
 89.7995 +        int i7892;
 89.7996 +        int i7893;
 89.7997 +        int i7894;
 89.7998 +        int i7895;
 89.7999 +        int i7896;
 89.8000 +        int i7897;
 89.8001 +        int i7898;
 89.8002 +        int i7899;
 89.8003 +        int i7900;
 89.8004 +        int i7901;
 89.8005 +        int i7902;
 89.8006 +        int i7903;
 89.8007 +        int i7904;
 89.8008 +        int i7905;
 89.8009 +        int i7906;
 89.8010 +        int i7907;
 89.8011 +        int i7908;
 89.8012 +        int i7909;
 89.8013 +        int i7910;
 89.8014 +        int i7911;
 89.8015 +        int i7912;
 89.8016 +        int i7913;
 89.8017 +        int i7914;
 89.8018 +        int i7915;
 89.8019 +        int i7916;
 89.8020 +        int i7917;
 89.8021 +        int i7918;
 89.8022 +        int i7919;
 89.8023 +        int i7920;
 89.8024 +        int i7921;
 89.8025 +        int i7922;
 89.8026 +        int i7923;
 89.8027 +        int i7924;
 89.8028 +        int i7925;
 89.8029 +        int i7926;
 89.8030 +        int i7927;
 89.8031 +        int i7928;
 89.8032 +        int i7929;
 89.8033 +        int i7930;
 89.8034 +        int i7931;
 89.8035 +        int i7932;
 89.8036 +        int i7933;
 89.8037 +        int i7934;
 89.8038 +        int i7935;
 89.8039 +        int i7936;
 89.8040 +        int i7937;
 89.8041 +        int i7938;
 89.8042 +        int i7939;
 89.8043 +        int i7940;
 89.8044 +        int i7941;
 89.8045 +        int i7942;
 89.8046 +        int i7943;
 89.8047 +        int i7944;
 89.8048 +        int i7945;
 89.8049 +        int i7946;
 89.8050 +        int i7947;
 89.8051 +        int i7948;
 89.8052 +        int i7949;
 89.8053 +        int i7950;
 89.8054 +        int i7951;
 89.8055 +        int i7952;
 89.8056 +        int i7953;
 89.8057 +        int i7954;
 89.8058 +        int i7955;
 89.8059 +        int i7956;
 89.8060 +        int i7957;
 89.8061 +        int i7958;
 89.8062 +        int i7959;
 89.8063 +        int i7960;
 89.8064 +        int i7961;
 89.8065 +        int i7962;
 89.8066 +        int i7963;
 89.8067 +        int i7964;
 89.8068 +        int i7965;
 89.8069 +        int i7966;
 89.8070 +        int i7967;
 89.8071 +        int i7968;
 89.8072 +        int i7969;
 89.8073 +        int i7970;
 89.8074 +        int i7971;
 89.8075 +        int i7972;
 89.8076 +        int i7973;
 89.8077 +        int i7974;
 89.8078 +        int i7975;
 89.8079 +        int i7976;
 89.8080 +        int i7977;
 89.8081 +        int i7978;
 89.8082 +        int i7979;
 89.8083 +        int i7980;
 89.8084 +        int i7981;
 89.8085 +        int i7982;
 89.8086 +        int i7983;
 89.8087 +        int i7984;
 89.8088 +        int i7985;
 89.8089 +        int i7986;
 89.8090 +        int i7987;
 89.8091 +        int i7988;
 89.8092 +        int i7989;
 89.8093 +        int i7990;
 89.8094 +        int i7991;
 89.8095 +        int i7992;
 89.8096 +        int i7993;
 89.8097 +        int i7994;
 89.8098 +        int i7995;
 89.8099 +        int i7996;
 89.8100 +        int i7997;
 89.8101 +        int i7998;
 89.8102 +        int i7999;
 89.8103 +        int i8000;
 89.8104 +        int i8001;
 89.8105 +        int i8002;
 89.8106 +        int i8003;
 89.8107 +        int i8004;
 89.8108 +        int i8005;
 89.8109 +        int i8006;
 89.8110 +        int i8007;
 89.8111 +        int i8008;
 89.8112 +        int i8009;
 89.8113 +        int i8010;
 89.8114 +        int i8011;
 89.8115 +        int i8012;
 89.8116 +        int i8013;
 89.8117 +        int i8014;
 89.8118 +        int i8015;
 89.8119 +        int i8016;
 89.8120 +        int i8017;
 89.8121 +        int i8018;
 89.8122 +        int i8019;
 89.8123 +        int i8020;
 89.8124 +        int i8021;
 89.8125 +        int i8022;
 89.8126 +        int i8023;
 89.8127 +        int i8024;
 89.8128 +        int i8025;
 89.8129 +        int i8026;
 89.8130 +        int i8027;
 89.8131 +        int i8028;
 89.8132 +        int i8029;
 89.8133 +        int i8030;
 89.8134 +        int i8031;
 89.8135 +        int i8032;
 89.8136 +        int i8033;
 89.8137 +        int i8034;
 89.8138 +        int i8035;
 89.8139 +        int i8036;
 89.8140 +        int i8037;
 89.8141 +        int i8038;
 89.8142 +        int i8039;
 89.8143 +        int i8040;
 89.8144 +        int i8041;
 89.8145 +        int i8042;
 89.8146 +        int i8043;
 89.8147 +        int i8044;
 89.8148 +        int i8045;
 89.8149 +        int i8046;
 89.8150 +        int i8047;
 89.8151 +        int i8048;
 89.8152 +        int i8049;
 89.8153 +        int i8050;
 89.8154 +        int i8051;
 89.8155 +        int i8052;
 89.8156 +        int i8053;
 89.8157 +        int i8054;
 89.8158 +        int i8055;
 89.8159 +        int i8056;
 89.8160 +        int i8057;
 89.8161 +        int i8058;
 89.8162 +        int i8059;
 89.8163 +        int i8060;
 89.8164 +        int i8061;
 89.8165 +        int i8062;
 89.8166 +        int i8063;
 89.8167 +        int i8064;
 89.8168 +        int i8065;
 89.8169 +        int i8066;
 89.8170 +        int i8067;
 89.8171 +        int i8068;
 89.8172 +        int i8069;
 89.8173 +        int i8070;
 89.8174 +        int i8071;
 89.8175 +        int i8072;
 89.8176 +        int i8073;
 89.8177 +        int i8074;
 89.8178 +        int i8075;
 89.8179 +        int i8076;
 89.8180 +        int i8077;
 89.8181 +        int i8078;
 89.8182 +        int i8079;
 89.8183 +        int i8080;
 89.8184 +        int i8081;
 89.8185 +        int i8082;
 89.8186 +        int i8083;
 89.8187 +        int i8084;
 89.8188 +        int i8085;
 89.8189 +        int i8086;
 89.8190 +        int i8087;
 89.8191 +        int i8088;
 89.8192 +        int i8089;
 89.8193 +        int i8090;
 89.8194 +        int i8091;
 89.8195 +        int i8092;
 89.8196 +        int i8093;
 89.8197 +        int i8094;
 89.8198 +        int i8095;
 89.8199 +        int i8096;
 89.8200 +        int i8097;
 89.8201 +        int i8098;
 89.8202 +        int i8099;
 89.8203 +        int i8100;
 89.8204 +        int i8101;
 89.8205 +        int i8102;
 89.8206 +        int i8103;
 89.8207 +        int i8104;
 89.8208 +        int i8105;
 89.8209 +        int i8106;
 89.8210 +        int i8107;
 89.8211 +        int i8108;
 89.8212 +        int i8109;
 89.8213 +        int i8110;
 89.8214 +        int i8111;
 89.8215 +        int i8112;
 89.8216 +        int i8113;
 89.8217 +        int i8114;
 89.8218 +        int i8115;
 89.8219 +        int i8116;
 89.8220 +        int i8117;
 89.8221 +        int i8118;
 89.8222 +        int i8119;
 89.8223 +        int i8120;
 89.8224 +        int i8121;
 89.8225 +        int i8122;
 89.8226 +        int i8123;
 89.8227 +        int i8124;
 89.8228 +        int i8125;
 89.8229 +        int i8126;
 89.8230 +        int i8127;
 89.8231 +        int i8128;
 89.8232 +        int i8129;
 89.8233 +        int i8130;
 89.8234 +        int i8131;
 89.8235 +        int i8132;
 89.8236 +        int i8133;
 89.8237 +        int i8134;
 89.8238 +        int i8135;
 89.8239 +        int i8136;
 89.8240 +        int i8137;
 89.8241 +        int i8138;
 89.8242 +        int i8139;
 89.8243 +        int i8140;
 89.8244 +        int i8141;
 89.8245 +        int i8142;
 89.8246 +        int i8143;
 89.8247 +        int i8144;
 89.8248 +        int i8145;
 89.8249 +        int i8146;
 89.8250 +        int i8147;
 89.8251 +        int i8148;
 89.8252 +        int i8149;
 89.8253 +        int i8150;
 89.8254 +        int i8151;
 89.8255 +        int i8152;
 89.8256 +        int i8153;
 89.8257 +        int i8154;
 89.8258 +        int i8155;
 89.8259 +        int i8156;
 89.8260 +        int i8157;
 89.8261 +        int i8158;
 89.8262 +        int i8159;
 89.8263 +        int i8160;
 89.8264 +        int i8161;
 89.8265 +        int i8162;
 89.8266 +        int i8163;
 89.8267 +        int i8164;
 89.8268 +        int i8165;
 89.8269 +        int i8166;
 89.8270 +        int i8167;
 89.8271 +        int i8168;
 89.8272 +        int i8169;
 89.8273 +        int i8170;
 89.8274 +        int i8171;
 89.8275 +        int i8172;
 89.8276 +        int i8173;
 89.8277 +        int i8174;
 89.8278 +        int i8175;
 89.8279 +        int i8176;
 89.8280 +        int i8177;
 89.8281 +        int i8178;
 89.8282 +        int i8179;
 89.8283 +        int i8180;
 89.8284 +        int i8181;
 89.8285 +        int i8182;
 89.8286 +        int i8183;
 89.8287 +        int i8184;
 89.8288 +        int i8185;
 89.8289 +        int i8186;
 89.8290 +        int i8187;
 89.8291 +        int i8188;
 89.8292 +        int i8189;
 89.8293 +        int i8190;
 89.8294 +        int i8191;
 89.8295 +        int i8192;
 89.8296 +        int i8193;
 89.8297 +        int i8194;
 89.8298 +        int i8195;
 89.8299 +        int i8196;
 89.8300 +        int i8197;
 89.8301 +        int i8198;
 89.8302 +        int i8199;
 89.8303 +        int i8200;
 89.8304 +        int i8201;
 89.8305 +        int i8202;
 89.8306 +        int i8203;
 89.8307 +        int i8204;
 89.8308 +        int i8205;
 89.8309 +        int i8206;
 89.8310 +        int i8207;
 89.8311 +        int i8208;
 89.8312 +        int i8209;
 89.8313 +        int i8210;
 89.8314 +        int i8211;
 89.8315 +        int i8212;
 89.8316 +        int i8213;
 89.8317 +        int i8214;
 89.8318 +        int i8215;
 89.8319 +        int i8216;
 89.8320 +        int i8217;
 89.8321 +        int i8218;
 89.8322 +        int i8219;
 89.8323 +        int i8220;
 89.8324 +        int i8221;
 89.8325 +        int i8222;
 89.8326 +        int i8223;
 89.8327 +        int i8224;
 89.8328 +        int i8225;
 89.8329 +        int i8226;
 89.8330 +        int i8227;
 89.8331 +        int i8228;
 89.8332 +        int i8229;
 89.8333 +        int i8230;
 89.8334 +        int i8231;
 89.8335 +        int i8232;
 89.8336 +        int i8233;
 89.8337 +        int i8234;
 89.8338 +        int i8235;
 89.8339 +        int i8236;
 89.8340 +        int i8237;
 89.8341 +        int i8238;
 89.8342 +        int i8239;
 89.8343 +        int i8240;
 89.8344 +        int i8241;
 89.8345 +        int i8242;
 89.8346 +        int i8243;
 89.8347 +        int i8244;
 89.8348 +        int i8245;
 89.8349 +        int i8246;
 89.8350 +        int i8247;
 89.8351 +        int i8248;
 89.8352 +        int i8249;
 89.8353 +        int i8250;
 89.8354 +        int i8251;
 89.8355 +        int i8252;
 89.8356 +        int i8253;
 89.8357 +        int i8254;
 89.8358 +        int i8255;
 89.8359 +        int i8256;
 89.8360 +        int i8257;
 89.8361 +        int i8258;
 89.8362 +        int i8259;
 89.8363 +        int i8260;
 89.8364 +        int i8261;
 89.8365 +        int i8262;
 89.8366 +        int i8263;
 89.8367 +        int i8264;
 89.8368 +        int i8265;
 89.8369 +        int i8266;
 89.8370 +        int i8267;
 89.8371 +        int i8268;
 89.8372 +        int i8269;
 89.8373 +        int i8270;
 89.8374 +        int i8271;
 89.8375 +        int i8272;
 89.8376 +        int i8273;
 89.8377 +        int i8274;
 89.8378 +        int i8275;
 89.8379 +        int i8276;
 89.8380 +        int i8277;
 89.8381 +        int i8278;
 89.8382 +        int i8279;
 89.8383 +        int i8280;
 89.8384 +        int i8281;
 89.8385 +        int i8282;
 89.8386 +        int i8283;
 89.8387 +        int i8284;
 89.8388 +        int i8285;
 89.8389 +        int i8286;
 89.8390 +        int i8287;
 89.8391 +        int i8288;
 89.8392 +        int i8289;
 89.8393 +        int i8290;
 89.8394 +        int i8291;
 89.8395 +        int i8292;
 89.8396 +        int i8293;
 89.8397 +        int i8294;
 89.8398 +        int i8295;
 89.8399 +        int i8296;
 89.8400 +        int i8297;
 89.8401 +        int i8298;
 89.8402 +        int i8299;
 89.8403 +        int i8300;
 89.8404 +        int i8301;
 89.8405 +        int i8302;
 89.8406 +        int i8303;
 89.8407 +        int i8304;
 89.8408 +        int i8305;
 89.8409 +        int i8306;
 89.8410 +        int i8307;
 89.8411 +        int i8308;
 89.8412 +        int i8309;
 89.8413 +        int i8310;
 89.8414 +        int i8311;
 89.8415 +        int i8312;
 89.8416 +        int i8313;
 89.8417 +        int i8314;
 89.8418 +        int i8315;
 89.8419 +        int i8316;
 89.8420 +        int i8317;
 89.8421 +        int i8318;
 89.8422 +        int i8319;
 89.8423 +        int i8320;
 89.8424 +        int i8321;
 89.8425 +        int i8322;
 89.8426 +        int i8323;
 89.8427 +        int i8324;
 89.8428 +        int i8325;
 89.8429 +        int i8326;
 89.8430 +        int i8327;
 89.8431 +        int i8328;
 89.8432 +        int i8329;
 89.8433 +        int i8330;
 89.8434 +        int i8331;
 89.8435 +        int i8332;
 89.8436 +        int i8333;
 89.8437 +        int i8334;
 89.8438 +        int i8335;
 89.8439 +        int i8336;
 89.8440 +        int i8337;
 89.8441 +        int i8338;
 89.8442 +        int i8339;
 89.8443 +        int i8340;
 89.8444 +        int i8341;
 89.8445 +        int i8342;
 89.8446 +        int i8343;
 89.8447 +        int i8344;
 89.8448 +        int i8345;
 89.8449 +        int i8346;
 89.8450 +        int i8347;
 89.8451 +        int i8348;
 89.8452 +        int i8349;
 89.8453 +        int i8350;
 89.8454 +        int i8351;
 89.8455 +        int i8352;
 89.8456 +        int i8353;
 89.8457 +        int i8354;
 89.8458 +        int i8355;
 89.8459 +        int i8356;
 89.8460 +        int i8357;
 89.8461 +        int i8358;
 89.8462 +        int i8359;
 89.8463 +        int i8360;
 89.8464 +        int i8361;
 89.8465 +        int i8362;
 89.8466 +        int i8363;
 89.8467 +        int i8364;
 89.8468 +        int i8365;
 89.8469 +        int i8366;
 89.8470 +        int i8367;
 89.8471 +        int i8368;
 89.8472 +        int i8369;
 89.8473 +        int i8370;
 89.8474 +        int i8371;
 89.8475 +        int i8372;
 89.8476 +        int i8373;
 89.8477 +        int i8374;
 89.8478 +        int i8375;
 89.8479 +        int i8376;
 89.8480 +        int i8377;
 89.8481 +        int i8378;
 89.8482 +        int i8379;
 89.8483 +        int i8380;
 89.8484 +        int i8381;
 89.8485 +        int i8382;
 89.8486 +        int i8383;
 89.8487 +        int i8384;
 89.8488 +        int i8385;
 89.8489 +        int i8386;
 89.8490 +        int i8387;
 89.8491 +        int i8388;
 89.8492 +        int i8389;
 89.8493 +        int i8390;
 89.8494 +        int i8391;
 89.8495 +        int i8392;
 89.8496 +        int i8393;
 89.8497 +        int i8394;
 89.8498 +        int i8395;
 89.8499 +        int i8396;
 89.8500 +        int i8397;
 89.8501 +        int i8398;
 89.8502 +        int i8399;
 89.8503 +        int i8400;
 89.8504 +        int i8401;
 89.8505 +        int i8402;
 89.8506 +        int i8403;
 89.8507 +        int i8404;
 89.8508 +        int i8405;
 89.8509 +        int i8406;
 89.8510 +        int i8407;
 89.8511 +        int i8408;
 89.8512 +        int i8409;
 89.8513 +        int i8410;
 89.8514 +        int i8411;
 89.8515 +        int i8412;
 89.8516 +        int i8413;
 89.8517 +        int i8414;
 89.8518 +        int i8415;
 89.8519 +        int i8416;
 89.8520 +        int i8417;
 89.8521 +        int i8418;
 89.8522 +        int i8419;
 89.8523 +        int i8420;
 89.8524 +        int i8421;
 89.8525 +        int i8422;
 89.8526 +        int i8423;
 89.8527 +        int i8424;
 89.8528 +        int i8425;
 89.8529 +        int i8426;
 89.8530 +        int i8427;
 89.8531 +        int i8428;
 89.8532 +        int i8429;
 89.8533 +        int i8430;
 89.8534 +        int i8431;
 89.8535 +        int i8432;
 89.8536 +        int i8433;
 89.8537 +        int i8434;
 89.8538 +        int i8435;
 89.8539 +        int i8436;
 89.8540 +        int i8437;
 89.8541 +        int i8438;
 89.8542 +        int i8439;
 89.8543 +        int i8440;
 89.8544 +        int i8441;
 89.8545 +        int i8442;
 89.8546 +        int i8443;
 89.8547 +        int i8444;
 89.8548 +        int i8445;
 89.8549 +        int i8446;
 89.8550 +        int i8447;
 89.8551 +        int i8448;
 89.8552 +        int i8449;
 89.8553 +        int i8450;
 89.8554 +        int i8451;
 89.8555 +        int i8452;
 89.8556 +        int i8453;
 89.8557 +        int i8454;
 89.8558 +        int i8455;
 89.8559 +        int i8456;
 89.8560 +        int i8457;
 89.8561 +        int i8458;
 89.8562 +        int i8459;
 89.8563 +        int i8460;
 89.8564 +        int i8461;
 89.8565 +        int i8462;
 89.8566 +        int i8463;
 89.8567 +        int i8464;
 89.8568 +        int i8465;
 89.8569 +        int i8466;
 89.8570 +        int i8467;
 89.8571 +        int i8468;
 89.8572 +        int i8469;
 89.8573 +        int i8470;
 89.8574 +        int i8471;
 89.8575 +        int i8472;
 89.8576 +        int i8473;
 89.8577 +        int i8474;
 89.8578 +        int i8475;
 89.8579 +        int i8476;
 89.8580 +        int i8477;
 89.8581 +        int i8478;
 89.8582 +        int i8479;
 89.8583 +        int i8480;
 89.8584 +        int i8481;
 89.8585 +        int i8482;
 89.8586 +        int i8483;
 89.8587 +        int i8484;
 89.8588 +        int i8485;
 89.8589 +        int i8486;
 89.8590 +        int i8487;
 89.8591 +        int i8488;
 89.8592 +        int i8489;
 89.8593 +        int i8490;
 89.8594 +        int i8491;
 89.8595 +        int i8492;
 89.8596 +        int i8493;
 89.8597 +        int i8494;
 89.8598 +        int i8495;
 89.8599 +        int i8496;
 89.8600 +        int i8497;
 89.8601 +        int i8498;
 89.8602 +        int i8499;
 89.8603 +        int i8500;
 89.8604 +        int i8501;
 89.8605 +        int i8502;
 89.8606 +        int i8503;
 89.8607 +        int i8504;
 89.8608 +        int i8505;
 89.8609 +        int i8506;
 89.8610 +        int i8507;
 89.8611 +        int i8508;
 89.8612 +        int i8509;
 89.8613 +        int i8510;
 89.8614 +        int i8511;
 89.8615 +        int i8512;
 89.8616 +        int i8513;
 89.8617 +        int i8514;
 89.8618 +        int i8515;
 89.8619 +        int i8516;
 89.8620 +        int i8517;
 89.8621 +        int i8518;
 89.8622 +        int i8519;
 89.8623 +        int i8520;
 89.8624 +        int i8521;
 89.8625 +        int i8522;
 89.8626 +        int i8523;
 89.8627 +        int i8524;
 89.8628 +        int i8525;
 89.8629 +        int i8526;
 89.8630 +        int i8527;
 89.8631 +        int i8528;
 89.8632 +        int i8529;
 89.8633 +        int i8530;
 89.8634 +        int i8531;
 89.8635 +        int i8532;
 89.8636 +        int i8533;
 89.8637 +        int i8534;
 89.8638 +        int i8535;
 89.8639 +        int i8536;
 89.8640 +        int i8537;
 89.8641 +        int i8538;
 89.8642 +        int i8539;
 89.8643 +        int i8540;
 89.8644 +        int i8541;
 89.8645 +        int i8542;
 89.8646 +        int i8543;
 89.8647 +        int i8544;
 89.8648 +        int i8545;
 89.8649 +        int i8546;
 89.8650 +        int i8547;
 89.8651 +        int i8548;
 89.8652 +        int i8549;
 89.8653 +        int i8550;
 89.8654 +        int i8551;
 89.8655 +        int i8552;
 89.8656 +        int i8553;
 89.8657 +        int i8554;
 89.8658 +        int i8555;
 89.8659 +        int i8556;
 89.8660 +        int i8557;
 89.8661 +        int i8558;
 89.8662 +        int i8559;
 89.8663 +        int i8560;
 89.8664 +        int i8561;
 89.8665 +        int i8562;
 89.8666 +        int i8563;
 89.8667 +        int i8564;
 89.8668 +        int i8565;
 89.8669 +        int i8566;
 89.8670 +        int i8567;
 89.8671 +        int i8568;
 89.8672 +        int i8569;
 89.8673 +        int i8570;
 89.8674 +        int i8571;
 89.8675 +        int i8572;
 89.8676 +        int i8573;
 89.8677 +        int i8574;
 89.8678 +        int i8575;
 89.8679 +        int i8576;
 89.8680 +        int i8577;
 89.8681 +        int i8578;
 89.8682 +        int i8579;
 89.8683 +        int i8580;
 89.8684 +        int i8581;
 89.8685 +        int i8582;
 89.8686 +        int i8583;
 89.8687 +        int i8584;
 89.8688 +        int i8585;
 89.8689 +        int i8586;
 89.8690 +        int i8587;
 89.8691 +        int i8588;
 89.8692 +        int i8589;
 89.8693 +        int i8590;
 89.8694 +        int i8591;
 89.8695 +        int i8592;
 89.8696 +        int i8593;
 89.8697 +        int i8594;
 89.8698 +        int i8595;
 89.8699 +        int i8596;
 89.8700 +        int i8597;
 89.8701 +        int i8598;
 89.8702 +        int i8599;
 89.8703 +        int i8600;
 89.8704 +        int i8601;
 89.8705 +        int i8602;
 89.8706 +        int i8603;
 89.8707 +        int i8604;
 89.8708 +        int i8605;
 89.8709 +        int i8606;
 89.8710 +        int i8607;
 89.8711 +        int i8608;
 89.8712 +        int i8609;
 89.8713 +        int i8610;
 89.8714 +        int i8611;
 89.8715 +        int i8612;
 89.8716 +        int i8613;
 89.8717 +        int i8614;
 89.8718 +        int i8615;
 89.8719 +        int i8616;
 89.8720 +        int i8617;
 89.8721 +        int i8618;
 89.8722 +        int i8619;
 89.8723 +        int i8620;
 89.8724 +        int i8621;
 89.8725 +        int i8622;
 89.8726 +        int i8623;
 89.8727 +        int i8624;
 89.8728 +        int i8625;
 89.8729 +        int i8626;
 89.8730 +        int i8627;
 89.8731 +        int i8628;
 89.8732 +        int i8629;
 89.8733 +        int i8630;
 89.8734 +        int i8631;
 89.8735 +        int i8632;
 89.8736 +        int i8633;
 89.8737 +        int i8634;
 89.8738 +        int i8635;
 89.8739 +        int i8636;
 89.8740 +        int i8637;
 89.8741 +        int i8638;
 89.8742 +        int i8639;
 89.8743 +        int i8640;
 89.8744 +        int i8641;
 89.8745 +        int i8642;
 89.8746 +        int i8643;
 89.8747 +        int i8644;
 89.8748 +        int i8645;
 89.8749 +        int i8646;
 89.8750 +        int i8647;
 89.8751 +        int i8648;
 89.8752 +        int i8649;
 89.8753 +        int i8650;
 89.8754 +        int i8651;
 89.8755 +        int i8652;
 89.8756 +        int i8653;
 89.8757 +        int i8654;
 89.8758 +        int i8655;
 89.8759 +        int i8656;
 89.8760 +        int i8657;
 89.8761 +        int i8658;
 89.8762 +        int i8659;
 89.8763 +        int i8660;
 89.8764 +        int i8661;
 89.8765 +        int i8662;
 89.8766 +        int i8663;
 89.8767 +        int i8664;
 89.8768 +        int i8665;
 89.8769 +        int i8666;
 89.8770 +        int i8667;
 89.8771 +        int i8668;
 89.8772 +        int i8669;
 89.8773 +        int i8670;
 89.8774 +        int i8671;
 89.8775 +        int i8672;
 89.8776 +        int i8673;
 89.8777 +        int i8674;
 89.8778 +        int i8675;
 89.8779 +        int i8676;
 89.8780 +        int i8677;
 89.8781 +        int i8678;
 89.8782 +        int i8679;
 89.8783 +        int i8680;
 89.8784 +        int i8681;
 89.8785 +        int i8682;
 89.8786 +        int i8683;
 89.8787 +        int i8684;
 89.8788 +        int i8685;
 89.8789 +        int i8686;
 89.8790 +        int i8687;
 89.8791 +        int i8688;
 89.8792 +        int i8689;
 89.8793 +        int i8690;
 89.8794 +        int i8691;
 89.8795 +        int i8692;
 89.8796 +        int i8693;
 89.8797 +        int i8694;
 89.8798 +        int i8695;
 89.8799 +        int i8696;
 89.8800 +        int i8697;
 89.8801 +        int i8698;
 89.8802 +        int i8699;
 89.8803 +        int i8700;
 89.8804 +        int i8701;
 89.8805 +        int i8702;
 89.8806 +        int i8703;
 89.8807 +        int i8704;
 89.8808 +        int i8705;
 89.8809 +        int i8706;
 89.8810 +        int i8707;
 89.8811 +        int i8708;
 89.8812 +        int i8709;
 89.8813 +        int i8710;
 89.8814 +        int i8711;
 89.8815 +        int i8712;
 89.8816 +        int i8713;
 89.8817 +        int i8714;
 89.8818 +        int i8715;
 89.8819 +        int i8716;
 89.8820 +        int i8717;
 89.8821 +        int i8718;
 89.8822 +        int i8719;
 89.8823 +        int i8720;
 89.8824 +        int i8721;
 89.8825 +        int i8722;
 89.8826 +        int i8723;
 89.8827 +        int i8724;
 89.8828 +        int i8725;
 89.8829 +        int i8726;
 89.8830 +        int i8727;
 89.8831 +        int i8728;
 89.8832 +        int i8729;
 89.8833 +        int i8730;
 89.8834 +        int i8731;
 89.8835 +        int i8732;
 89.8836 +        int i8733;
 89.8837 +        int i8734;
 89.8838 +        int i8735;
 89.8839 +        int i8736;
 89.8840 +        int i8737;
 89.8841 +        int i8738;
 89.8842 +        int i8739;
 89.8843 +        int i8740;
 89.8844 +        int i8741;
 89.8845 +        int i8742;
 89.8846 +        int i8743;
 89.8847 +        int i8744;
 89.8848 +        int i8745;
 89.8849 +        int i8746;
 89.8850 +        int i8747;
 89.8851 +        int i8748;
 89.8852 +        int i8749;
 89.8853 +        int i8750;
 89.8854 +        int i8751;
 89.8855 +        int i8752;
 89.8856 +        int i8753;
 89.8857 +        int i8754;
 89.8858 +        int i8755;
 89.8859 +        int i8756;
 89.8860 +        int i8757;
 89.8861 +        int i8758;
 89.8862 +        int i8759;
 89.8863 +        int i8760;
 89.8864 +        int i8761;
 89.8865 +        int i8762;
 89.8866 +        int i8763;
 89.8867 +        int i8764;
 89.8868 +        int i8765;
 89.8869 +        int i8766;
 89.8870 +        int i8767;
 89.8871 +        int i8768;
 89.8872 +        int i8769;
 89.8873 +        int i8770;
 89.8874 +        int i8771;
 89.8875 +        int i8772;
 89.8876 +        int i8773;
 89.8877 +        int i8774;
 89.8878 +        int i8775;
 89.8879 +        int i8776;
 89.8880 +        int i8777;
 89.8881 +        int i8778;
 89.8882 +        int i8779;
 89.8883 +        int i8780;
 89.8884 +        int i8781;
 89.8885 +        int i8782;
 89.8886 +        int i8783;
 89.8887 +        int i8784;
 89.8888 +        int i8785;
 89.8889 +        int i8786;
 89.8890 +        int i8787;
 89.8891 +        int i8788;
 89.8892 +        int i8789;
 89.8893 +        int i8790;
 89.8894 +        int i8791;
 89.8895 +        int i8792;
 89.8896 +        int i8793;
 89.8897 +        int i8794;
 89.8898 +        int i8795;
 89.8899 +        int i8796;
 89.8900 +        int i8797;
 89.8901 +        int i8798;
 89.8902 +        int i8799;
 89.8903 +        int i8800;
 89.8904 +        int i8801;
 89.8905 +        int i8802;
 89.8906 +        int i8803;
 89.8907 +        int i8804;
 89.8908 +        int i8805;
 89.8909 +        int i8806;
 89.8910 +        int i8807;
 89.8911 +        int i8808;
 89.8912 +        int i8809;
 89.8913 +        int i8810;
 89.8914 +        int i8811;
 89.8915 +        int i8812;
 89.8916 +        int i8813;
 89.8917 +        int i8814;
 89.8918 +        int i8815;
 89.8919 +        int i8816;
 89.8920 +        int i8817;
 89.8921 +        int i8818;
 89.8922 +        int i8819;
 89.8923 +        int i8820;
 89.8924 +        int i8821;
 89.8925 +        int i8822;
 89.8926 +        int i8823;
 89.8927 +        int i8824;
 89.8928 +        int i8825;
 89.8929 +        int i8826;
 89.8930 +        int i8827;
 89.8931 +        int i8828;
 89.8932 +        int i8829;
 89.8933 +        int i8830;
 89.8934 +        int i8831;
 89.8935 +        int i8832;
 89.8936 +        int i8833;
 89.8937 +        int i8834;
 89.8938 +        int i8835;
 89.8939 +        int i8836;
 89.8940 +        int i8837;
 89.8941 +        int i8838;
 89.8942 +        int i8839;
 89.8943 +        int i8840;
 89.8944 +        int i8841;
 89.8945 +        int i8842;
 89.8946 +        int i8843;
 89.8947 +        int i8844;
 89.8948 +        int i8845;
 89.8949 +        int i8846;
 89.8950 +        int i8847;
 89.8951 +        int i8848;
 89.8952 +        int i8849;
 89.8953 +        int i8850;
 89.8954 +        int i8851;
 89.8955 +        int i8852;
 89.8956 +        int i8853;
 89.8957 +        int i8854;
 89.8958 +        int i8855;
 89.8959 +        int i8856;
 89.8960 +        int i8857;
 89.8961 +        int i8858;
 89.8962 +        int i8859;
 89.8963 +        int i8860;
 89.8964 +        int i8861;
 89.8965 +        int i8862;
 89.8966 +        int i8863;
 89.8967 +        int i8864;
 89.8968 +        int i8865;
 89.8969 +        int i8866;
 89.8970 +        int i8867;
 89.8971 +        int i8868;
 89.8972 +        int i8869;
 89.8973 +        int i8870;
 89.8974 +        int i8871;
 89.8975 +        int i8872;
 89.8976 +        int i8873;
 89.8977 +        int i8874;
 89.8978 +        int i8875;
 89.8979 +        int i8876;
 89.8980 +        int i8877;
 89.8981 +        int i8878;
 89.8982 +        int i8879;
 89.8983 +        int i8880;
 89.8984 +        int i8881;
 89.8985 +        int i8882;
 89.8986 +        int i8883;
 89.8987 +        int i8884;
 89.8988 +        int i8885;
 89.8989 +        int i8886;
 89.8990 +        int i8887;
 89.8991 +        int i8888;
 89.8992 +        int i8889;
 89.8993 +        int i8890;
 89.8994 +        int i8891;
 89.8995 +        int i8892;
 89.8996 +        int i8893;
 89.8997 +        int i8894;
 89.8998 +        int i8895;
 89.8999 +        int i8896;
 89.9000 +        int i8897;
 89.9001 +        int i8898;
 89.9002 +        int i8899;
 89.9003 +        int i8900;
 89.9004 +        int i8901;
 89.9005 +        int i8902;
 89.9006 +        int i8903;
 89.9007 +        int i8904;
 89.9008 +        int i8905;
 89.9009 +        int i8906;
 89.9010 +        int i8907;
 89.9011 +        int i8908;
 89.9012 +        int i8909;
 89.9013 +        int i8910;
 89.9014 +        int i8911;
 89.9015 +        int i8912;
 89.9016 +        int i8913;
 89.9017 +        int i8914;
 89.9018 +        int i8915;
 89.9019 +        int i8916;
 89.9020 +        int i8917;
 89.9021 +        int i8918;
 89.9022 +        int i8919;
 89.9023 +        int i8920;
 89.9024 +        int i8921;
 89.9025 +        int i8922;
 89.9026 +        int i8923;
 89.9027 +        int i8924;
 89.9028 +        int i8925;
 89.9029 +        int i8926;
 89.9030 +        int i8927;
 89.9031 +        int i8928;
 89.9032 +        int i8929;
 89.9033 +        int i8930;
 89.9034 +        int i8931;
 89.9035 +        int i8932;
 89.9036 +        int i8933;
 89.9037 +        int i8934;
 89.9038 +        int i8935;
 89.9039 +        int i8936;
 89.9040 +        int i8937;
 89.9041 +        int i8938;
 89.9042 +        int i8939;
 89.9043 +        int i8940;
 89.9044 +        int i8941;
 89.9045 +        int i8942;
 89.9046 +        int i8943;
 89.9047 +        int i8944;
 89.9048 +        int i8945;
 89.9049 +        int i8946;
 89.9050 +        int i8947;
 89.9051 +        int i8948;
 89.9052 +        int i8949;
 89.9053 +        int i8950;
 89.9054 +        int i8951;
 89.9055 +        int i8952;
 89.9056 +        int i8953;
 89.9057 +        int i8954;
 89.9058 +        int i8955;
 89.9059 +        int i8956;
 89.9060 +        int i8957;
 89.9061 +        int i8958;
 89.9062 +        int i8959;
 89.9063 +        int i8960;
 89.9064 +        int i8961;
 89.9065 +        int i8962;
 89.9066 +        int i8963;
 89.9067 +        int i8964;
 89.9068 +        int i8965;
 89.9069 +        int i8966;
 89.9070 +        int i8967;
 89.9071 +        int i8968;
 89.9072 +        int i8969;
 89.9073 +        int i8970;
 89.9074 +        int i8971;
 89.9075 +        int i8972;
 89.9076 +        int i8973;
 89.9077 +        int i8974;
 89.9078 +        int i8975;
 89.9079 +        int i8976;
 89.9080 +        int i8977;
 89.9081 +        int i8978;
 89.9082 +        int i8979;
 89.9083 +        int i8980;
 89.9084 +        int i8981;
 89.9085 +        int i8982;
 89.9086 +        int i8983;
 89.9087 +        int i8984;
 89.9088 +        int i8985;
 89.9089 +        int i8986;
 89.9090 +        int i8987;
 89.9091 +        int i8988;
 89.9092 +        int i8989;
 89.9093 +        int i8990;
 89.9094 +        int i8991;
 89.9095 +        int i8992;
 89.9096 +        int i8993;
 89.9097 +        int i8994;
 89.9098 +        int i8995;
 89.9099 +        int i8996;
 89.9100 +        int i8997;
 89.9101 +        int i8998;
 89.9102 +        int i8999;
 89.9103 +        int i9000;
 89.9104 +        int i9001;
 89.9105 +        int i9002;
 89.9106 +        int i9003;
 89.9107 +        int i9004;
 89.9108 +        int i9005;
 89.9109 +        int i9006;
 89.9110 +        int i9007;
 89.9111 +        int i9008;
 89.9112 +        int i9009;
 89.9113 +        int i9010;
 89.9114 +        int i9011;
 89.9115 +        int i9012;
 89.9116 +        int i9013;
 89.9117 +        int i9014;
 89.9118 +        int i9015;
 89.9119 +        int i9016;
 89.9120 +        int i9017;
 89.9121 +        int i9018;
 89.9122 +        int i9019;
 89.9123 +        int i9020;
 89.9124 +        int i9021;
 89.9125 +        int i9022;
 89.9126 +        int i9023;
 89.9127 +        int i9024;
 89.9128 +        int i9025;
 89.9129 +        int i9026;
 89.9130 +        int i9027;
 89.9131 +        int i9028;
 89.9132 +        int i9029;
 89.9133 +        int i9030;
 89.9134 +        int i9031;
 89.9135 +        int i9032;
 89.9136 +        int i9033;
 89.9137 +        int i9034;
 89.9138 +        int i9035;
 89.9139 +        int i9036;
 89.9140 +        int i9037;
 89.9141 +        int i9038;
 89.9142 +        int i9039;
 89.9143 +        int i9040;
 89.9144 +        int i9041;
 89.9145 +        int i9042;
 89.9146 +        int i9043;
 89.9147 +        int i9044;
 89.9148 +        int i9045;
 89.9149 +        int i9046;
 89.9150 +        int i9047;
 89.9151 +        int i9048;
 89.9152 +        int i9049;
 89.9153 +        int i9050;
 89.9154 +        int i9051;
 89.9155 +        int i9052;
 89.9156 +        int i9053;
 89.9157 +        int i9054;
 89.9158 +        int i9055;
 89.9159 +        int i9056;
 89.9160 +        int i9057;
 89.9161 +        int i9058;
 89.9162 +        int i9059;
 89.9163 +        int i9060;
 89.9164 +        int i9061;
 89.9165 +        int i9062;
 89.9166 +        int i9063;
 89.9167 +        int i9064;
 89.9168 +        int i9065;
 89.9169 +        int i9066;
 89.9170 +        int i9067;
 89.9171 +        int i9068;
 89.9172 +        int i9069;
 89.9173 +        int i9070;
 89.9174 +        int i9071;
 89.9175 +        int i9072;
 89.9176 +        int i9073;
 89.9177 +        int i9074;
 89.9178 +        int i9075;
 89.9179 +        int i9076;
 89.9180 +        int i9077;
 89.9181 +        int i9078;
 89.9182 +        int i9079;
 89.9183 +        int i9080;
 89.9184 +        int i9081;
 89.9185 +        int i9082;
 89.9186 +        int i9083;
 89.9187 +        int i9084;
 89.9188 +        int i9085;
 89.9189 +        int i9086;
 89.9190 +        int i9087;
 89.9191 +        int i9088;
 89.9192 +        int i9089;
 89.9193 +        int i9090;
 89.9194 +        int i9091;
 89.9195 +        int i9092;
 89.9196 +        int i9093;
 89.9197 +        int i9094;
 89.9198 +        int i9095;
 89.9199 +        int i9096;
 89.9200 +        int i9097;
 89.9201 +        int i9098;
 89.9202 +        int i9099;
 89.9203 +        int i9100;
 89.9204 +        int i9101;
 89.9205 +        int i9102;
 89.9206 +        int i9103;
 89.9207 +        int i9104;
 89.9208 +        int i9105;
 89.9209 +        int i9106;
 89.9210 +        int i9107;
 89.9211 +        int i9108;
 89.9212 +        int i9109;
 89.9213 +        int i9110;
 89.9214 +        int i9111;
 89.9215 +        int i9112;
 89.9216 +        int i9113;
 89.9217 +        int i9114;
 89.9218 +        int i9115;
 89.9219 +        int i9116;
 89.9220 +        int i9117;
 89.9221 +        int i9118;
 89.9222 +        int i9119;
 89.9223 +        int i9120;
 89.9224 +        int i9121;
 89.9225 +        int i9122;
 89.9226 +        int i9123;
 89.9227 +        int i9124;
 89.9228 +        int i9125;
 89.9229 +        int i9126;
 89.9230 +        int i9127;
 89.9231 +        int i9128;
 89.9232 +        int i9129;
 89.9233 +        int i9130;
 89.9234 +        int i9131;
 89.9235 +        int i9132;
 89.9236 +        int i9133;
 89.9237 +        int i9134;
 89.9238 +        int i9135;
 89.9239 +        int i9136;
 89.9240 +        int i9137;
 89.9241 +        int i9138;
 89.9242 +        int i9139;
 89.9243 +        int i9140;
 89.9244 +        int i9141;
 89.9245 +        int i9142;
 89.9246 +        int i9143;
 89.9247 +        int i9144;
 89.9248 +        int i9145;
 89.9249 +        int i9146;
 89.9250 +        int i9147;
 89.9251 +        int i9148;
 89.9252 +        int i9149;
 89.9253 +        int i9150;
 89.9254 +        int i9151;
 89.9255 +        int i9152;
 89.9256 +        int i9153;
 89.9257 +        int i9154;
 89.9258 +        int i9155;
 89.9259 +        int i9156;
 89.9260 +        int i9157;
 89.9261 +        int i9158;
 89.9262 +        int i9159;
 89.9263 +        int i9160;
 89.9264 +        int i9161;
 89.9265 +        int i9162;
 89.9266 +        int i9163;
 89.9267 +        int i9164;
 89.9268 +        int i9165;
 89.9269 +        int i9166;
 89.9270 +        int i9167;
 89.9271 +        int i9168;
 89.9272 +        int i9169;
 89.9273 +        int i9170;
 89.9274 +        int i9171;
 89.9275 +        int i9172;
 89.9276 +        int i9173;
 89.9277 +        int i9174;
 89.9278 +        int i9175;
 89.9279 +        int i9176;
 89.9280 +        int i9177;
 89.9281 +        int i9178;
 89.9282 +        int i9179;
 89.9283 +        int i9180;
 89.9284 +        int i9181;
 89.9285 +        int i9182;
 89.9286 +        int i9183;
 89.9287 +        int i9184;
 89.9288 +        int i9185;
 89.9289 +        int i9186;
 89.9290 +        int i9187;
 89.9291 +        int i9188;
 89.9292 +        int i9189;
 89.9293 +        int i9190;
 89.9294 +        int i9191;
 89.9295 +        int i9192;
 89.9296 +        int i9193;
 89.9297 +        int i9194;
 89.9298 +        int i9195;
 89.9299 +        int i9196;
 89.9300 +        int i9197;
 89.9301 +        int i9198;
 89.9302 +        int i9199;
 89.9303 +        int i9200;
 89.9304 +        int i9201;
 89.9305 +        int i9202;
 89.9306 +        int i9203;
 89.9307 +        int i9204;
 89.9308 +        int i9205;
 89.9309 +        int i9206;
 89.9310 +        int i9207;
 89.9311 +        int i9208;
 89.9312 +        int i9209;
 89.9313 +        int i9210;
 89.9314 +        int i9211;
 89.9315 +        int i9212;
 89.9316 +        int i9213;
 89.9317 +        int i9214;
 89.9318 +        int i9215;
 89.9319 +        int i9216;
 89.9320 +        int i9217;
 89.9321 +        int i9218;
 89.9322 +        int i9219;
 89.9323 +        int i9220;
 89.9324 +        int i9221;
 89.9325 +        int i9222;
 89.9326 +        int i9223;
 89.9327 +        int i9224;
 89.9328 +        int i9225;
 89.9329 +        int i9226;
 89.9330 +        int i9227;
 89.9331 +        int i9228;
 89.9332 +        int i9229;
 89.9333 +        int i9230;
 89.9334 +        int i9231;
 89.9335 +        int i9232;
 89.9336 +        int i9233;
 89.9337 +        int i9234;
 89.9338 +        int i9235;
 89.9339 +        int i9236;
 89.9340 +        int i9237;
 89.9341 +        int i9238;
 89.9342 +        int i9239;
 89.9343 +        int i9240;
 89.9344 +        int i9241;
 89.9345 +        int i9242;
 89.9346 +        int i9243;
 89.9347 +        int i9244;
 89.9348 +        int i9245;
 89.9349 +        int i9246;
 89.9350 +        int i9247;
 89.9351 +        int i9248;
 89.9352 +        int i9249;
 89.9353 +        int i9250;
 89.9354 +        int i9251;
 89.9355 +        int i9252;
 89.9356 +        int i9253;
 89.9357 +        int i9254;
 89.9358 +        int i9255;
 89.9359 +        int i9256;
 89.9360 +        int i9257;
 89.9361 +        int i9258;
 89.9362 +        int i9259;
 89.9363 +        int i9260;
 89.9364 +        int i9261;
 89.9365 +        int i9262;
 89.9366 +        int i9263;
 89.9367 +        int i9264;
 89.9368 +        int i9265;
 89.9369 +        int i9266;
 89.9370 +        int i9267;
 89.9371 +        int i9268;
 89.9372 +        int i9269;
 89.9373 +        int i9270;
 89.9374 +        int i9271;
 89.9375 +        int i9272;
 89.9376 +        int i9273;
 89.9377 +        int i9274;
 89.9378 +        int i9275;
 89.9379 +        int i9276;
 89.9380 +        int i9277;
 89.9381 +        int i9278;
 89.9382 +        int i9279;
 89.9383 +        int i9280;
 89.9384 +        int i9281;
 89.9385 +        int i9282;
 89.9386 +        int i9283;
 89.9387 +        int i9284;
 89.9388 +        int i9285;
 89.9389 +        int i9286;
 89.9390 +        int i9287;
 89.9391 +        int i9288;
 89.9392 +        int i9289;
 89.9393 +        int i9290;
 89.9394 +        int i9291;
 89.9395 +        int i9292;
 89.9396 +        int i9293;
 89.9397 +        int i9294;
 89.9398 +        int i9295;
 89.9399 +        int i9296;
 89.9400 +        int i9297;
 89.9401 +        int i9298;
 89.9402 +        int i9299;
 89.9403 +        int i9300;
 89.9404 +        int i9301;
 89.9405 +        int i9302;
 89.9406 +        int i9303;
 89.9407 +        int i9304;
 89.9408 +        int i9305;
 89.9409 +        int i9306;
 89.9410 +        int i9307;
 89.9411 +        int i9308;
 89.9412 +        int i9309;
 89.9413 +        int i9310;
 89.9414 +        int i9311;
 89.9415 +        int i9312;
 89.9416 +        int i9313;
 89.9417 +        int i9314;
 89.9418 +        int i9315;
 89.9419 +        int i9316;
 89.9420 +        int i9317;
 89.9421 +        int i9318;
 89.9422 +        int i9319;
 89.9423 +        int i9320;
 89.9424 +        int i9321;
 89.9425 +        int i9322;
 89.9426 +        int i9323;
 89.9427 +        int i9324;
 89.9428 +        int i9325;
 89.9429 +        int i9326;
 89.9430 +        int i9327;
 89.9431 +        int i9328;
 89.9432 +        int i9329;
 89.9433 +        int i9330;
 89.9434 +        int i9331;
 89.9435 +        int i9332;
 89.9436 +        int i9333;
 89.9437 +        int i9334;
 89.9438 +        int i9335;
 89.9439 +        int i9336;
 89.9440 +        int i9337;
 89.9441 +        int i9338;
 89.9442 +        int i9339;
 89.9443 +        int i9340;
 89.9444 +        int i9341;
 89.9445 +        int i9342;
 89.9446 +        int i9343;
 89.9447 +        int i9344;
 89.9448 +        int i9345;
 89.9449 +        int i9346;
 89.9450 +        int i9347;
 89.9451 +        int i9348;
 89.9452 +        int i9349;
 89.9453 +        int i9350;
 89.9454 +        int i9351;
 89.9455 +        int i9352;
 89.9456 +        int i9353;
 89.9457 +        int i9354;
 89.9458 +        int i9355;
 89.9459 +        int i9356;
 89.9460 +        int i9357;
 89.9461 +        int i9358;
 89.9462 +        int i9359;
 89.9463 +        int i9360;
 89.9464 +        int i9361;
 89.9465 +        int i9362;
 89.9466 +        int i9363;
 89.9467 +        int i9364;
 89.9468 +        int i9365;
 89.9469 +        int i9366;
 89.9470 +        int i9367;
 89.9471 +        int i9368;
 89.9472 +        int i9369;
 89.9473 +        int i9370;
 89.9474 +        int i9371;
 89.9475 +        int i9372;
 89.9476 +        int i9373;
 89.9477 +        int i9374;
 89.9478 +        int i9375;
 89.9479 +        int i9376;
 89.9480 +        int i9377;
 89.9481 +        int i9378;
 89.9482 +        int i9379;
 89.9483 +        int i9380;
 89.9484 +        int i9381;
 89.9485 +        int i9382;
 89.9486 +        int i9383;
 89.9487 +        int i9384;
 89.9488 +        int i9385;
 89.9489 +        int i9386;
 89.9490 +        int i9387;
 89.9491 +        int i9388;
 89.9492 +        int i9389;
 89.9493 +        int i9390;
 89.9494 +        int i9391;
 89.9495 +        int i9392;
 89.9496 +        int i9393;
 89.9497 +        int i9394;
 89.9498 +        int i9395;
 89.9499 +        int i9396;
 89.9500 +        int i9397;
 89.9501 +        int i9398;
 89.9502 +        int i9399;
 89.9503 +        int i9400;
 89.9504 +        int i9401;
 89.9505 +        int i9402;
 89.9506 +        int i9403;
 89.9507 +        int i9404;
 89.9508 +        int i9405;
 89.9509 +        int i9406;
 89.9510 +        int i9407;
 89.9511 +        int i9408;
 89.9512 +        int i9409;
 89.9513 +        int i9410;
 89.9514 +        int i9411;
 89.9515 +        int i9412;
 89.9516 +        int i9413;
 89.9517 +        int i9414;
 89.9518 +        int i9415;
 89.9519 +        int i9416;
 89.9520 +        int i9417;
 89.9521 +        int i9418;
 89.9522 +        int i9419;
 89.9523 +        int i9420;
 89.9524 +        int i9421;
 89.9525 +        int i9422;
 89.9526 +        int i9423;
 89.9527 +        int i9424;
 89.9528 +        int i9425;
 89.9529 +        int i9426;
 89.9530 +        int i9427;
 89.9531 +        int i9428;
 89.9532 +        int i9429;
 89.9533 +        int i9430;
 89.9534 +        int i9431;
 89.9535 +        int i9432;
 89.9536 +        int i9433;
 89.9537 +        int i9434;
 89.9538 +        int i9435;
 89.9539 +        int i9436;
 89.9540 +        int i9437;
 89.9541 +        int i9438;
 89.9542 +        int i9439;
 89.9543 +        int i9440;
 89.9544 +        int i9441;
 89.9545 +        int i9442;
 89.9546 +        int i9443;
 89.9547 +        int i9444;
 89.9548 +        int i9445;
 89.9549 +        int i9446;
 89.9550 +        int i9447;
 89.9551 +        int i9448;
 89.9552 +        int i9449;
 89.9553 +        int i9450;
 89.9554 +        int i9451;
 89.9555 +        int i9452;
 89.9556 +        int i9453;
 89.9557 +        int i9454;
 89.9558 +        int i9455;
 89.9559 +        int i9456;
 89.9560 +        int i9457;
 89.9561 +        int i9458;
 89.9562 +        int i9459;
 89.9563 +        int i9460;
 89.9564 +        int i9461;
 89.9565 +        int i9462;
 89.9566 +        int i9463;
 89.9567 +        int i9464;
 89.9568 +        int i9465;
 89.9569 +        int i9466;
 89.9570 +        int i9467;
 89.9571 +        int i9468;
 89.9572 +        int i9469;
 89.9573 +        int i9470;
 89.9574 +        int i9471;
 89.9575 +        int i9472;
 89.9576 +        int i9473;
 89.9577 +        int i9474;
 89.9578 +        int i9475;
 89.9579 +        int i9476;
 89.9580 +        int i9477;
 89.9581 +        int i9478;
 89.9582 +        int i9479;
 89.9583 +        int i9480;
 89.9584 +        int i9481;
 89.9585 +        int i9482;
 89.9586 +        int i9483;
 89.9587 +        int i9484;
 89.9588 +        int i9485;
 89.9589 +        int i9486;
 89.9590 +        int i9487;
 89.9591 +        int i9488;
 89.9592 +        int i9489;
 89.9593 +        int i9490;
 89.9594 +        int i9491;
 89.9595 +        int i9492;
 89.9596 +        int i9493;
 89.9597 +        int i9494;
 89.9598 +        int i9495;
 89.9599 +        int i9496;
 89.9600 +        int i9497;
 89.9601 +        int i9498;
 89.9602 +        int i9499;
 89.9603 +        int i9500;
 89.9604 +        int i9501;
 89.9605 +        int i9502;
 89.9606 +        int i9503;
 89.9607 +        int i9504;
 89.9608 +        int i9505;
 89.9609 +        int i9506;
 89.9610 +        int i9507;
 89.9611 +        int i9508;
 89.9612 +        int i9509;
 89.9613 +        int i9510;
 89.9614 +        int i9511;
 89.9615 +        int i9512;
 89.9616 +        int i9513;
 89.9617 +        int i9514;
 89.9618 +        int i9515;
 89.9619 +        int i9516;
 89.9620 +        int i9517;
 89.9621 +        int i9518;
 89.9622 +        int i9519;
 89.9623 +        int i9520;
 89.9624 +        int i9521;
 89.9625 +        int i9522;
 89.9626 +        int i9523;
 89.9627 +        int i9524;
 89.9628 +        int i9525;
 89.9629 +        int i9526;
 89.9630 +        int i9527;
 89.9631 +        int i9528;
 89.9632 +        int i9529;
 89.9633 +        int i9530;
 89.9634 +        int i9531;
 89.9635 +        int i9532;
 89.9636 +        int i9533;
 89.9637 +        int i9534;
 89.9638 +        int i9535;
 89.9639 +        int i9536;
 89.9640 +        int i9537;
 89.9641 +        int i9538;
 89.9642 +        int i9539;
 89.9643 +        int i9540;
 89.9644 +        int i9541;
 89.9645 +        int i9542;
 89.9646 +        int i9543;
 89.9647 +        int i9544;
 89.9648 +        int i9545;
 89.9649 +        int i9546;
 89.9650 +        int i9547;
 89.9651 +        int i9548;
 89.9652 +        int i9549;
 89.9653 +        int i9550;
 89.9654 +        int i9551;
 89.9655 +        int i9552;
 89.9656 +        int i9553;
 89.9657 +        int i9554;
 89.9658 +        int i9555;
 89.9659 +        int i9556;
 89.9660 +        int i9557;
 89.9661 +        int i9558;
 89.9662 +        int i9559;
 89.9663 +        int i9560;
 89.9664 +        int i9561;
 89.9665 +        int i9562;
 89.9666 +        int i9563;
 89.9667 +        int i9564;
 89.9668 +        int i9565;
 89.9669 +        int i9566;
 89.9670 +        int i9567;
 89.9671 +        int i9568;
 89.9672 +        int i9569;
 89.9673 +        int i9570;
 89.9674 +        int i9571;
 89.9675 +        int i9572;
 89.9676 +        int i9573;
 89.9677 +        int i9574;
 89.9678 +        int i9575;
 89.9679 +        int i9576;
 89.9680 +        int i9577;
 89.9681 +        int i9578;
 89.9682 +        int i9579;
 89.9683 +        int i9580;
 89.9684 +        int i9581;
 89.9685 +        int i9582;
 89.9686 +        int i9583;
 89.9687 +        int i9584;
 89.9688 +        int i9585;
 89.9689 +        int i9586;
 89.9690 +        int i9587;
 89.9691 +        int i9588;
 89.9692 +        int i9589;
 89.9693 +        int i9590;
 89.9694 +        int i9591;
 89.9695 +        int i9592;
 89.9696 +        int i9593;
 89.9697 +        int i9594;
 89.9698 +        int i9595;
 89.9699 +        int i9596;
 89.9700 +        int i9597;
 89.9701 +        int i9598;
 89.9702 +        int i9599;
 89.9703 +        int i9600;
 89.9704 +        int i9601;
 89.9705 +        int i9602;
 89.9706 +        int i9603;
 89.9707 +        int i9604;
 89.9708 +        int i9605;
 89.9709 +        int i9606;
 89.9710 +        int i9607;
 89.9711 +        int i9608;
 89.9712 +        int i9609;
 89.9713 +        int i9610;
 89.9714 +        int i9611;
 89.9715 +        int i9612;
 89.9716 +        int i9613;
 89.9717 +        int i9614;
 89.9718 +        int i9615;
 89.9719 +        int i9616;
 89.9720 +        int i9617;
 89.9721 +        int i9618;
 89.9722 +        int i9619;
 89.9723 +        int i9620;
 89.9724 +        int i9621;
 89.9725 +        int i9622;
 89.9726 +        int i9623;
 89.9727 +        int i9624;
 89.9728 +        int i9625;
 89.9729 +        int i9626;
 89.9730 +        int i9627;
 89.9731 +        int i9628;
 89.9732 +        int i9629;
 89.9733 +        int i9630;
 89.9734 +        int i9631;
 89.9735 +        int i9632;
 89.9736 +        int i9633;
 89.9737 +        int i9634;
 89.9738 +        int i9635;
 89.9739 +        int i9636;
 89.9740 +        int i9637;
 89.9741 +        int i9638;
 89.9742 +        int i9639;
 89.9743 +        int i9640;
 89.9744 +        int i9641;
 89.9745 +        int i9642;
 89.9746 +        int i9643;
 89.9747 +        int i9644;
 89.9748 +        int i9645;
 89.9749 +        int i9646;
 89.9750 +        int i9647;
 89.9751 +        int i9648;
 89.9752 +        int i9649;
 89.9753 +        int i9650;
 89.9754 +        int i9651;
 89.9755 +        int i9652;
 89.9756 +        int i9653;
 89.9757 +        int i9654;
 89.9758 +        int i9655;
 89.9759 +        int i9656;
 89.9760 +        int i9657;
 89.9761 +        int i9658;
 89.9762 +        int i9659;
 89.9763 +        int i9660;
 89.9764 +        int i9661;
 89.9765 +        int i9662;
 89.9766 +        int i9663;
 89.9767 +        int i9664;
 89.9768 +        int i9665;
 89.9769 +        int i9666;
 89.9770 +        int i9667;
 89.9771 +        int i9668;
 89.9772 +        int i9669;
 89.9773 +        int i9670;
 89.9774 +        int i9671;
 89.9775 +        int i9672;
 89.9776 +        int i9673;
 89.9777 +        int i9674;
 89.9778 +        int i9675;
 89.9779 +        int i9676;
 89.9780 +        int i9677;
 89.9781 +        int i9678;
 89.9782 +        int i9679;
 89.9783 +        int i9680;
 89.9784 +        int i9681;
 89.9785 +        int i9682;
 89.9786 +        int i9683;
 89.9787 +        int i9684;
 89.9788 +        int i9685;
 89.9789 +        int i9686;
 89.9790 +        int i9687;
 89.9791 +        int i9688;
 89.9792 +        int i9689;
 89.9793 +        int i9690;
 89.9794 +        int i9691;
 89.9795 +        int i9692;
 89.9796 +        int i9693;
 89.9797 +        int i9694;
 89.9798 +        int i9695;
 89.9799 +        int i9696;
 89.9800 +        int i9697;
 89.9801 +        int i9698;
 89.9802 +        int i9699;
 89.9803 +        int i9700;
 89.9804 +        int i9701;
 89.9805 +        int i9702;
 89.9806 +        int i9703;
 89.9807 +        int i9704;
 89.9808 +        int i9705;
 89.9809 +        int i9706;
 89.9810 +        int i9707;
 89.9811 +        int i9708;
 89.9812 +        int i9709;
 89.9813 +        int i9710;
 89.9814 +        int i9711;
 89.9815 +        int i9712;
 89.9816 +        int i9713;
 89.9817 +        int i9714;
 89.9818 +        int i9715;
 89.9819 +        int i9716;
 89.9820 +        int i9717;
 89.9821 +        int i9718;
 89.9822 +        int i9719;
 89.9823 +        int i9720;
 89.9824 +        int i9721;
 89.9825 +        int i9722;
 89.9826 +        int i9723;
 89.9827 +        int i9724;
 89.9828 +        int i9725;
 89.9829 +        int i9726;
 89.9830 +        int i9727;
 89.9831 +        int i9728;
 89.9832 +        int i9729;
 89.9833 +        int i9730;
 89.9834 +        int i9731;
 89.9835 +        int i9732;
 89.9836 +        int i9733;
 89.9837 +        int i9734;
 89.9838 +        int i9735;
 89.9839 +        int i9736;
 89.9840 +        int i9737;
 89.9841 +        int i9738;
 89.9842 +        int i9739;
 89.9843 +        int i9740;
 89.9844 +        int i9741;
 89.9845 +        int i9742;
 89.9846 +        int i9743;
 89.9847 +        int i9744;
 89.9848 +        int i9745;
 89.9849 +        int i9746;
 89.9850 +        int i9747;
 89.9851 +        int i9748;
 89.9852 +        int i9749;
 89.9853 +        int i9750;
 89.9854 +        int i9751;
 89.9855 +        int i9752;
 89.9856 +        int i9753;
 89.9857 +        int i9754;
 89.9858 +        int i9755;
 89.9859 +        int i9756;
 89.9860 +        int i9757;
 89.9861 +        int i9758;
 89.9862 +        int i9759;
 89.9863 +        int i9760;
 89.9864 +        int i9761;
 89.9865 +        int i9762;
 89.9866 +        int i9763;
 89.9867 +        int i9764;
 89.9868 +        int i9765;
 89.9869 +        int i9766;
 89.9870 +        int i9767;
 89.9871 +        int i9768;
 89.9872 +        int i9769;
 89.9873 +        int i9770;
 89.9874 +        int i9771;
 89.9875 +        int i9772;
 89.9876 +        int i9773;
 89.9877 +        int i9774;
 89.9878 +        int i9775;
 89.9879 +        int i9776;
 89.9880 +        int i9777;
 89.9881 +        int i9778;
 89.9882 +        int i9779;
 89.9883 +        int i9780;
 89.9884 +        int i9781;
 89.9885 +        int i9782;
 89.9886 +        int i9783;
 89.9887 +        int i9784;
 89.9888 +        int i9785;
 89.9889 +        int i9786;
 89.9890 +        int i9787;
 89.9891 +        int i9788;
 89.9892 +        int i9789;
 89.9893 +        int i9790;
 89.9894 +        int i9791;
 89.9895 +        int i9792;
 89.9896 +        int i9793;
 89.9897 +        int i9794;
 89.9898 +        int i9795;
 89.9899 +        int i9796;
 89.9900 +        int i9797;
 89.9901 +        int i9798;
 89.9902 +        int i9799;
 89.9903 +        int i9800;
 89.9904 +        int i9801;
 89.9905 +        int i9802;
 89.9906 +        int i9803;
 89.9907 +        int i9804;
 89.9908 +        int i9805;
 89.9909 +        int i9806;
 89.9910 +        int i9807;
 89.9911 +        int i9808;
 89.9912 +        int i9809;
 89.9913 +        int i9810;
 89.9914 +        int i9811;
 89.9915 +        int i9812;
 89.9916 +        int i9813;
 89.9917 +        int i9814;
 89.9918 +        int i9815;
 89.9919 +        int i9816;
 89.9920 +        int i9817;
 89.9921 +        int i9818;
 89.9922 +        int i9819;
 89.9923 +        int i9820;
 89.9924 +        int i9821;
 89.9925 +        int i9822;
 89.9926 +        int i9823;
 89.9927 +        int i9824;
 89.9928 +        int i9825;
 89.9929 +        int i9826;
 89.9930 +        int i9827;
 89.9931 +        int i9828;
 89.9932 +        int i9829;
 89.9933 +        int i9830;
 89.9934 +        int i9831;
 89.9935 +        int i9832;
 89.9936 +        int i9833;
 89.9937 +        int i9834;
 89.9938 +        int i9835;
 89.9939 +        int i9836;
 89.9940 +        int i9837;
 89.9941 +        int i9838;
 89.9942 +        int i9839;
 89.9943 +        int i9840;
 89.9944 +        int i9841;
 89.9945 +        int i9842;
 89.9946 +        int i9843;
 89.9947 +        int i9844;
 89.9948 +        int i9845;
 89.9949 +        int i9846;
 89.9950 +        int i9847;
 89.9951 +        int i9848;
 89.9952 +        int i9849;
 89.9953 +        int i9850;
 89.9954 +        int i9851;
 89.9955 +        int i9852;
 89.9956 +        int i9853;
 89.9957 +        int i9854;
 89.9958 +        int i9855;
 89.9959 +        int i9856;
 89.9960 +        int i9857;
 89.9961 +        int i9858;
 89.9962 +        int i9859;
 89.9963 +        int i9860;
 89.9964 +        int i9861;
 89.9965 +        int i9862;
 89.9966 +        int i9863;
 89.9967 +        int i9864;
 89.9968 +        int i9865;
 89.9969 +        int i9866;
 89.9970 +        int i9867;
 89.9971 +        int i9868;
 89.9972 +        int i9869;
 89.9973 +        int i9870;
 89.9974 +        int i9871;
 89.9975 +        int i9872;
 89.9976 +        int i9873;
 89.9977 +        int i9874;
 89.9978 +        int i9875;
 89.9979 +        int i9876;
 89.9980 +        int i9877;
 89.9981 +        int i9878;
 89.9982 +        int i9879;
 89.9983 +        int i9880;
 89.9984 +        int i9881;
 89.9985 +        int i9882;
 89.9986 +        int i9883;
 89.9987 +        int i9884;
 89.9988 +        int i9885;
 89.9989 +        int i9886;
 89.9990 +        int i9887;
 89.9991 +        int i9888;
 89.9992 +        int i9889;
 89.9993 +        int i9890;
 89.9994 +        int i9891;
 89.9995 +        int i9892;
 89.9996 +        int i9893;
 89.9997 +        int i9894;
 89.9998 +        int i9895;
 89.9999 +        int i9896;
89.10000 +        int i9897;
89.10001 +        int i9898;
89.10002 +        int i9899;
89.10003 +        int i9900;
89.10004 +        int i9901;
89.10005 +        int i9902;
89.10006 +        int i9903;
89.10007 +        int i9904;
89.10008 +        int i9905;
89.10009 +        int i9906;
89.10010 +        int i9907;
89.10011 +        int i9908;
89.10012 +        int i9909;
89.10013 +        int i9910;
89.10014 +        int i9911;
89.10015 +        int i9912;
89.10016 +        int i9913;
89.10017 +        int i9914;
89.10018 +        int i9915;
89.10019 +        int i9916;
89.10020 +        int i9917;
89.10021 +        int i9918;
89.10022 +        int i9919;
89.10023 +        int i9920;
89.10024 +        int i9921;
89.10025 +        int i9922;
89.10026 +        int i9923;
89.10027 +        int i9924;
89.10028 +        int i9925;
89.10029 +        int i9926;
89.10030 +        int i9927;
89.10031 +        int i9928;
89.10032 +        int i9929;
89.10033 +        int i9930;
89.10034 +        int i9931;
89.10035 +        int i9932;
89.10036 +        int i9933;
89.10037 +        int i9934;
89.10038 +        int i9935;
89.10039 +        int i9936;
89.10040 +        int i9937;
89.10041 +        int i9938;
89.10042 +        int i9939;
89.10043 +        int i9940;
89.10044 +        int i9941;
89.10045 +        int i9942;
89.10046 +        int i9943;
89.10047 +        int i9944;
89.10048 +        int i9945;
89.10049 +        int i9946;
89.10050 +        int i9947;
89.10051 +        int i9948;
89.10052 +        int i9949;
89.10053 +        int i9950;
89.10054 +        int i9951;
89.10055 +        int i9952;
89.10056 +        int i9953;
89.10057 +        int i9954;
89.10058 +        int i9955;
89.10059 +        int i9956;
89.10060 +        int i9957;
89.10061 +        int i9958;
89.10062 +        int i9959;
89.10063 +        int i9960;
89.10064 +        int i9961;
89.10065 +        int i9962;
89.10066 +        int i9963;
89.10067 +        int i9964;
89.10068 +        int i9965;
89.10069 +        int i9966;
89.10070 +        int i9967;
89.10071 +        int i9968;
89.10072 +        int i9969;
89.10073 +        int i9970;
89.10074 +        int i9971;
89.10075 +        int i9972;
89.10076 +        int i9973;
89.10077 +        int i9974;
89.10078 +        int i9975;
89.10079 +        int i9976;
89.10080 +        int i9977;
89.10081 +        int i9978;
89.10082 +        int i9979;
89.10083 +        int i9980;
89.10084 +        int i9981;
89.10085 +        int i9982;
89.10086 +        int i9983;
89.10087 +        int i9984;
89.10088 +        int i9985;
89.10089 +        int i9986;
89.10090 +        int i9987;
89.10091 +        int i9988;
89.10092 +        int i9989;
89.10093 +        int i9990;
89.10094 +        int i9991;
89.10095 +        int i9992;
89.10096 +        int i9993;
89.10097 +        int i9994;
89.10098 +        int i9995;
89.10099 +        int i9996;
89.10100 +        int i9997;
89.10101 +        int i9998;
89.10102 +        int i9999;
89.10103 +        int i10000;
89.10104 +        int i10001;
89.10105 +        int i10002;
89.10106 +        int i10003;
89.10107 +        int i10004;
89.10108 +        int i10005;
89.10109 +        int i10006;
89.10110 +        int i10007;
89.10111 +        int i10008;
89.10112 +        int i10009;
89.10113 +        int i10010;
89.10114 +        int i10011;
89.10115 +        int i10012;
89.10116 +        int i10013;
89.10117 +        int i10014;
89.10118 +        int i10015;
89.10119 +        int i10016;
89.10120 +        int i10017;
89.10121 +        int i10018;
89.10122 +        int i10019;
89.10123 +        int i10020;
89.10124 +        int i10021;
89.10125 +        int i10022;
89.10126 +        int i10023;
89.10127 +        int i10024;
89.10128 +        int i10025;
89.10129 +        int i10026;
89.10130 +        int i10027;
89.10131 +        int i10028;
89.10132 +        int i10029;
89.10133 +        int i10030;
89.10134 +        int i10031;
89.10135 +        int i10032;
89.10136 +        int i10033;
89.10137 +        int i10034;
89.10138 +        int i10035;
89.10139 +        int i10036;
89.10140 +        int i10037;
89.10141 +        int i10038;
89.10142 +        int i10039;
89.10143 +        int i10040;
89.10144 +        int i10041;
89.10145 +        int i10042;
89.10146 +        int i10043;
89.10147 +        int i10044;
89.10148 +        int i10045;
89.10149 +        int i10046;
89.10150 +        int i10047;
89.10151 +        int i10048;
89.10152 +        int i10049;
89.10153 +        int i10050;
89.10154 +        int i10051;
89.10155 +        int i10052;
89.10156 +        int i10053;
89.10157 +        int i10054;
89.10158 +        int i10055;
89.10159 +        int i10056;
89.10160 +        int i10057;
89.10161 +        int i10058;
89.10162 +        int i10059;
89.10163 +        int i10060;
89.10164 +        int i10061;
89.10165 +        int i10062;
89.10166 +        int i10063;
89.10167 +        int i10064;
89.10168 +        int i10065;
89.10169 +        int i10066;
89.10170 +        int i10067;
89.10171 +        int i10068;
89.10172 +        int i10069;
89.10173 +        int i10070;
89.10174 +        int i10071;
89.10175 +        int i10072;
89.10176 +        int i10073;
89.10177 +        int i10074;
89.10178 +        int i10075;
89.10179 +        int i10076;
89.10180 +        int i10077;
89.10181 +        int i10078;
89.10182 +        int i10079;
89.10183 +        int i10080;
89.10184 +        int i10081;
89.10185 +        int i10082;
89.10186 +        int i10083;
89.10187 +        int i10084;
89.10188 +        int i10085;
89.10189 +        int i10086;
89.10190 +        int i10087;
89.10191 +        int i10088;
89.10192 +        int i10089;
89.10193 +        int i10090;
89.10194 +        int i10091;
89.10195 +        int i10092;
89.10196 +        int i10093;
89.10197 +        int i10094;
89.10198 +        int i10095;
89.10199 +        int i10096;
89.10200 +        int i10097;
89.10201 +        int i10098;
89.10202 +        int i10099;
89.10203 +        int i10100;
89.10204 +        int i10101;
89.10205 +        int i10102;
89.10206 +        int i10103;
89.10207 +        int i10104;
89.10208 +        int i10105;
89.10209 +        int i10106;
89.10210 +        int i10107;
89.10211 +        int i10108;
89.10212 +        int i10109;
89.10213 +        int i10110;
89.10214 +        int i10111;
89.10215 +        int i10112;
89.10216 +        int i10113;
89.10217 +        int i10114;
89.10218 +        int i10115;
89.10219 +        int i10116;
89.10220 +        int i10117;
89.10221 +        int i10118;
89.10222 +        int i10119;
89.10223 +        int i10120;
89.10224 +        int i10121;
89.10225 +        int i10122;
89.10226 +        int i10123;
89.10227 +        int i10124;
89.10228 +        int i10125;
89.10229 +        int i10126;
89.10230 +        int i10127;
89.10231 +        int i10128;
89.10232 +        int i10129;
89.10233 +        int i10130;
89.10234 +        int i10131;
89.10235 +        int i10132;
89.10236 +        int i10133;
89.10237 +        int i10134;
89.10238 +        int i10135;
89.10239 +        int i10136;
89.10240 +        int i10137;
89.10241 +        int i10138;
89.10242 +        int i10139;
89.10243 +        int i10140;
89.10244 +        int i10141;
89.10245 +        int i10142;
89.10246 +        int i10143;
89.10247 +        int i10144;
89.10248 +        int i10145;
89.10249 +        int i10146;
89.10250 +        int i10147;
89.10251 +        int i10148;
89.10252 +        int i10149;
89.10253 +        int i10150;
89.10254 +        int i10151;
89.10255 +        int i10152;
89.10256 +        int i10153;
89.10257 +        int i10154;
89.10258 +        int i10155;
89.10259 +        int i10156;
89.10260 +        int i10157;
89.10261 +        int i10158;
89.10262 +        int i10159;
89.10263 +        int i10160;
89.10264 +        int i10161;
89.10265 +        int i10162;
89.10266 +        int i10163;
89.10267 +        int i10164;
89.10268 +        int i10165;
89.10269 +        int i10166;
89.10270 +        int i10167;
89.10271 +        int i10168;
89.10272 +        int i10169;
89.10273 +        int i10170;
89.10274 +        int i10171;
89.10275 +        int i10172;
89.10276 +        int i10173;
89.10277 +        int i10174;
89.10278 +        int i10175;
89.10279 +        int i10176;
89.10280 +        int i10177;
89.10281 +        int i10178;
89.10282 +        int i10179;
89.10283 +        int i10180;
89.10284 +        int i10181;
89.10285 +        int i10182;
89.10286 +        int i10183;
89.10287 +        int i10184;
89.10288 +        int i10185;
89.10289 +        int i10186;
89.10290 +        int i10187;
89.10291 +        int i10188;
89.10292 +        int i10189;
89.10293 +        int i10190;
89.10294 +        int i10191;
89.10295 +        int i10192;
89.10296 +        int i10193;
89.10297 +        int i10194;
89.10298 +        int i10195;
89.10299 +        int i10196;
89.10300 +        int i10197;
89.10301 +        int i10198;
89.10302 +        int i10199;
89.10303 +        int i10200;
89.10304 +        int i10201;
89.10305 +        int i10202;
89.10306 +        int i10203;
89.10307 +        int i10204;
89.10308 +        int i10205;
89.10309 +        int i10206;
89.10310 +        int i10207;
89.10311 +        int i10208;
89.10312 +        int i10209;
89.10313 +        int i10210;
89.10314 +        int i10211;
89.10315 +        int i10212;
89.10316 +        int i10213;
89.10317 +        int i10214;
89.10318 +        int i10215;
89.10319 +        int i10216;
89.10320 +        int i10217;
89.10321 +        int i10218;
89.10322 +        int i10219;
89.10323 +        int i10220;
89.10324 +        int i10221;
89.10325 +        int i10222;
89.10326 +        int i10223;
89.10327 +        int i10224;
89.10328 +        int i10225;
89.10329 +        int i10226;
89.10330 +        int i10227;
89.10331 +        int i10228;
89.10332 +        int i10229;
89.10333 +        int i10230;
89.10334 +        int i10231;
89.10335 +        int i10232;
89.10336 +        int i10233;
89.10337 +        int i10234;
89.10338 +        int i10235;
89.10339 +        int i10236;
89.10340 +        int i10237;
89.10341 +        int i10238;
89.10342 +        int i10239;
89.10343 +        int i10240;
89.10344 +        int i10241;
89.10345 +        int i10242;
89.10346 +        int i10243;
89.10347 +        int i10244;
89.10348 +        int i10245;
89.10349 +        int i10246;
89.10350 +        int i10247;
89.10351 +        int i10248;
89.10352 +        int i10249;
89.10353 +        int i10250;
89.10354 +        int i10251;
89.10355 +        int i10252;
89.10356 +        int i10253;
89.10357 +        int i10254;
89.10358 +        int i10255;
89.10359 +        int i10256;
89.10360 +        int i10257;
89.10361 +        int i10258;
89.10362 +        int i10259;
89.10363 +        int i10260;
89.10364 +        int i10261;
89.10365 +        int i10262;
89.10366 +        int i10263;
89.10367 +        int i10264;
89.10368 +        int i10265;
89.10369 +        int i10266;
89.10370 +        int i10267;
89.10371 +        int i10268;
89.10372 +        int i10269;
89.10373 +        int i10270;
89.10374 +        int i10271;
89.10375 +        int i10272;
89.10376 +        int i10273;
89.10377 +        int i10274;
89.10378 +        int i10275;
89.10379 +        int i10276;
89.10380 +        int i10277;
89.10381 +        int i10278;
89.10382 +        int i10279;
89.10383 +        int i10280;
89.10384 +        int i10281;
89.10385 +        int i10282;
89.10386 +        int i10283;
89.10387 +        int i10284;
89.10388 +        int i10285;
89.10389 +        int i10286;
89.10390 +        int i10287;
89.10391 +        int i10288;
89.10392 +        int i10289;
89.10393 +        int i10290;
89.10394 +        int i10291;
89.10395 +        int i10292;
89.10396 +        int i10293;
89.10397 +        int i10294;
89.10398 +        int i10295;
89.10399 +        int i10296;
89.10400 +        int i10297;
89.10401 +        int i10298;
89.10402 +        int i10299;
89.10403 +        int i10300;
89.10404 +        int i10301;
89.10405 +        int i10302;
89.10406 +        int i10303;
89.10407 +        int i10304;
89.10408 +        int i10305;
89.10409 +        int i10306;
89.10410 +        int i10307;
89.10411 +        int i10308;
89.10412 +        int i10309;
89.10413 +        int i10310;
89.10414 +        int i10311;
89.10415 +        int i10312;
89.10416 +        int i10313;
89.10417 +        int i10314;
89.10418 +        int i10315;
89.10419 +        int i10316;
89.10420 +        int i10317;
89.10421 +        int i10318;
89.10422 +        int i10319;
89.10423 +        int i10320;
89.10424 +        int i10321;
89.10425 +        int i10322;
89.10426 +        int i10323;
89.10427 +        int i10324;
89.10428 +        int i10325;
89.10429 +        int i10326;
89.10430 +        int i10327;
89.10431 +        int i10328;
89.10432 +        int i10329;
89.10433 +        int i10330;
89.10434 +        int i10331;
89.10435 +        int i10332;
89.10436 +        int i10333;
89.10437 +        int i10334;
89.10438 +        int i10335;
89.10439 +        int i10336;
89.10440 +        int i10337;
89.10441 +        int i10338;
89.10442 +        int i10339;
89.10443 +        int i10340;
89.10444 +        int i10341;
89.10445 +        int i10342;
89.10446 +        int i10343;
89.10447 +        int i10344;
89.10448 +        int i10345;
89.10449 +        int i10346;
89.10450 +        int i10347;
89.10451 +        int i10348;
89.10452 +        int i10349;
89.10453 +        int i10350;
89.10454 +        int i10351;
89.10455 +        int i10352;
89.10456 +        int i10353;
89.10457 +        int i10354;
89.10458 +        int i10355;
89.10459 +        int i10356;
89.10460 +        int i10357;
89.10461 +        int i10358;
89.10462 +        int i10359;
89.10463 +        int i10360;
89.10464 +        int i10361;
89.10465 +        int i10362;
89.10466 +        int i10363;
89.10467 +        int i10364;
89.10468 +        int i10365;
89.10469 +        int i10366;
89.10470 +        int i10367;
89.10471 +        int i10368;
89.10472 +        int i10369;
89.10473 +        int i10370;
89.10474 +        int i10371;
89.10475 +        int i10372;
89.10476 +        int i10373;
89.10477 +        int i10374;
89.10478 +        int i10375;
89.10479 +        int i10376;
89.10480 +        int i10377;
89.10481 +        int i10378;
89.10482 +        int i10379;
89.10483 +        int i10380;
89.10484 +        int i10381;
89.10485 +        int i10382;
89.10486 +        int i10383;
89.10487 +        int i10384;
89.10488 +        int i10385;
89.10489 +        int i10386;
89.10490 +        int i10387;
89.10491 +        int i10388;
89.10492 +        int i10389;
89.10493 +        int i10390;
89.10494 +        int i10391;
89.10495 +        int i10392;
89.10496 +        int i10393;
89.10497 +        int i10394;
89.10498 +        int i10395;
89.10499 +        int i10396;
89.10500 +        int i10397;
89.10501 +        int i10398;
89.10502 +        int i10399;
89.10503 +        int i10400;
89.10504 +        int i10401;
89.10505 +        int i10402;
89.10506 +        int i10403;
89.10507 +        int i10404;
89.10508 +        int i10405;
89.10509 +        int i10406;
89.10510 +        int i10407;
89.10511 +        int i10408;
89.10512 +        int i10409;
89.10513 +        int i10410;
89.10514 +        int i10411;
89.10515 +        int i10412;
89.10516 +        int i10413;
89.10517 +        int i10414;
89.10518 +        int i10415;
89.10519 +        int i10416;
89.10520 +        int i10417;
89.10521 +        int i10418;
89.10522 +        int i10419;
89.10523 +        int i10420;
89.10524 +        int i10421;
89.10525 +        int i10422;
89.10526 +        int i10423;
89.10527 +        int i10424;
89.10528 +        int i10425;
89.10529 +        int i10426;
89.10530 +        int i10427;
89.10531 +        int i10428;
89.10532 +        int i10429;
89.10533 +        int i10430;
89.10534 +        int i10431;
89.10535 +        int i10432;
89.10536 +        int i10433;
89.10537 +        int i10434;
89.10538 +        int i10435;
89.10539 +        int i10436;
89.10540 +        int i10437;
89.10541 +        int i10438;
89.10542 +        int i10439;
89.10543 +        int i10440;
89.10544 +        int i10441;
89.10545 +        int i10442;
89.10546 +        int i10443;
89.10547 +        int i10444;
89.10548 +        int i10445;
89.10549 +        int i10446;
89.10550 +        int i10447;
89.10551 +        int i10448;
89.10552 +        int i10449;
89.10553 +        int i10450;
89.10554 +        int i10451;
89.10555 +        int i10452;
89.10556 +        int i10453;
89.10557 +        int i10454;
89.10558 +        int i10455;
89.10559 +        int i10456;
89.10560 +        int i10457;
89.10561 +        int i10458;
89.10562 +        int i10459;
89.10563 +        int i10460;
89.10564 +        int i10461;
89.10565 +        int i10462;
89.10566 +        int i10463;
89.10567 +        int i10464;
89.10568 +        int i10465;
89.10569 +        int i10466;
89.10570 +        int i10467;
89.10571 +        int i10468;
89.10572 +        int i10469;
89.10573 +        int i10470;
89.10574 +        int i10471;
89.10575 +        int i10472;
89.10576 +        int i10473;
89.10577 +        int i10474;
89.10578 +        int i10475;
89.10579 +        int i10476;
89.10580 +        int i10477;
89.10581 +        int i10478;
89.10582 +        int i10479;
89.10583 +        int i10480;
89.10584 +        int i10481;
89.10585 +        int i10482;
89.10586 +        int i10483;
89.10587 +        int i10484;
89.10588 +        int i10485;
89.10589 +        int i10486;
89.10590 +        int i10487;
89.10591 +        int i10488;
89.10592 +        int i10489;
89.10593 +        int i10490;
89.10594 +        int i10491;
89.10595 +        int i10492;
89.10596 +        int i10493;
89.10597 +        int i10494;
89.10598 +        int i10495;
89.10599 +        int i10496;
89.10600 +        int i10497;
89.10601 +        int i10498;
89.10602 +        int i10499;
89.10603 +        int i10500;
89.10604 +        int i10501;
89.10605 +        int i10502;
89.10606 +        int i10503;
89.10607 +        int i10504;
89.10608 +        int i10505;
89.10609 +        int i10506;
89.10610 +        int i10507;
89.10611 +        int i10508;
89.10612 +        int i10509;
89.10613 +        int i10510;
89.10614 +        int i10511;
89.10615 +        int i10512;
89.10616 +        int i10513;
89.10617 +        int i10514;
89.10618 +        int i10515;
89.10619 +        int i10516;
89.10620 +        int i10517;
89.10621 +        int i10518;
89.10622 +        int i10519;
89.10623 +        int i10520;
89.10624 +        int i10521;
89.10625 +        int i10522;
89.10626 +        int i10523;
89.10627 +        int i10524;
89.10628 +        int i10525;
89.10629 +        int i10526;
89.10630 +        int i10527;
89.10631 +        int i10528;
89.10632 +        int i10529;
89.10633 +        int i10530;
89.10634 +        int i10531;
89.10635 +        int i10532;
89.10636 +        int i10533;
89.10637 +        int i10534;
89.10638 +        int i10535;
89.10639 +        int i10536;
89.10640 +        int i10537;
89.10641 +        int i10538;
89.10642 +        int i10539;
89.10643 +        int i10540;
89.10644 +        int i10541;
89.10645 +        int i10542;
89.10646 +        int i10543;
89.10647 +        int i10544;
89.10648 +        int i10545;
89.10649 +        int i10546;
89.10650 +        int i10547;
89.10651 +        int i10548;
89.10652 +        int i10549;
89.10653 +        int i10550;
89.10654 +        int i10551;
89.10655 +        int i10552;
89.10656 +        int i10553;
89.10657 +        int i10554;
89.10658 +        int i10555;
89.10659 +        int i10556;
89.10660 +        int i10557;
89.10661 +        int i10558;
89.10662 +        int i10559;
89.10663 +        int i10560;
89.10664 +        int i10561;
89.10665 +        int i10562;
89.10666 +        int i10563;
89.10667 +        int i10564;
89.10668 +        int i10565;
89.10669 +        int i10566;
89.10670 +        int i10567;
89.10671 +        int i10568;
89.10672 +        int i10569;
89.10673 +        int i10570;
89.10674 +        int i10571;
89.10675 +        int i10572;
89.10676 +        int i10573;
89.10677 +        int i10574;
89.10678 +        int i10575;
89.10679 +        int i10576;
89.10680 +        int i10577;
89.10681 +        int i10578;
89.10682 +        int i10579;
89.10683 +        int i10580;
89.10684 +        int i10581;
89.10685 +        int i10582;
89.10686 +        int i10583;
89.10687 +        int i10584;
89.10688 +        int i10585;
89.10689 +        int i10586;
89.10690 +        int i10587;
89.10691 +        int i10588;
89.10692 +        int i10589;
89.10693 +        int i10590;
89.10694 +        int i10591;
89.10695 +        int i10592;
89.10696 +        int i10593;
89.10697 +        int i10594;
89.10698 +        int i10595;
89.10699 +        int i10596;
89.10700 +        int i10597;
89.10701 +        int i10598;
89.10702 +        int i10599;
89.10703 +        int i10600;
89.10704 +        int i10601;
89.10705 +        int i10602;
89.10706 +        int i10603;
89.10707 +        int i10604;
89.10708 +        int i10605;
89.10709 +        int i10606;
89.10710 +        int i10607;
89.10711 +        int i10608;
89.10712 +        int i10609;
89.10713 +        int i10610;
89.10714 +        int i10611;
89.10715 +        int i10612;
89.10716 +        int i10613;
89.10717 +        int i10614;
89.10718 +        int i10615;
89.10719 +        int i10616;
89.10720 +        int i10617;
89.10721 +        int i10618;
89.10722 +        int i10619;
89.10723 +        int i10620;
89.10724 +        int i10621;
89.10725 +        int i10622;
89.10726 +        int i10623;
89.10727 +        int i10624;
89.10728 +        int i10625;
89.10729 +        int i10626;
89.10730 +        int i10627;
89.10731 +        int i10628;
89.10732 +        int i10629;
89.10733 +        int i10630;
89.10734 +        int i10631;
89.10735 +        int i10632;
89.10736 +        int i10633;
89.10737 +        int i10634;
89.10738 +        int i10635;
89.10739 +        int i10636;
89.10740 +        int i10637;
89.10741 +        int i10638;
89.10742 +        int i10639;
89.10743 +        int i10640;
89.10744 +        int i10641;
89.10745 +        int i10642;
89.10746 +        int i10643;
89.10747 +        int i10644;
89.10748 +        int i10645;
89.10749 +        int i10646;
89.10750 +        int i10647;
89.10751 +        int i10648;
89.10752 +        int i10649;
89.10753 +        int i10650;
89.10754 +        int i10651;
89.10755 +        int i10652;
89.10756 +        int i10653;
89.10757 +        int i10654;
89.10758 +        int i10655;
89.10759 +        int i10656;
89.10760 +        int i10657;
89.10761 +        int i10658;
89.10762 +        int i10659;
89.10763 +        int i10660;
89.10764 +        int i10661;
89.10765 +        int i10662;
89.10766 +        int i10663;
89.10767 +        int i10664;
89.10768 +        int i10665;
89.10769 +        int i10666;
89.10770 +        int i10667;
89.10771 +        int i10668;
89.10772 +        int i10669;
89.10773 +        int i10670;
89.10774 +        int i10671;
89.10775 +        int i10672;
89.10776 +        int i10673;
89.10777 +        int i10674;
89.10778 +        int i10675;
89.10779 +        int i10676;
89.10780 +        int i10677;
89.10781 +        int i10678;
89.10782 +        int i10679;
89.10783 +        int i10680;
89.10784 +        int i10681;
89.10785 +        int i10682;
89.10786 +        int i10683;
89.10787 +        int i10684;
89.10788 +        int i10685;
89.10789 +        int i10686;
89.10790 +        int i10687;
89.10791 +        int i10688;
89.10792 +        int i10689;
89.10793 +        int i10690;
89.10794 +        int i10691;
89.10795 +        int i10692;
89.10796 +        int i10693;
89.10797 +        int i10694;
89.10798 +        int i10695;
89.10799 +        int i10696;
89.10800 +        int i10697;
89.10801 +        int i10698;
89.10802 +        int i10699;
89.10803 +        int i10700;
89.10804 +        int i10701;
89.10805 +        int i10702;
89.10806 +        int i10703;
89.10807 +        int i10704;
89.10808 +        int i10705;
89.10809 +        int i10706;
89.10810 +        int i10707;
89.10811 +        int i10708;
89.10812 +        int i10709;
89.10813 +        int i10710;
89.10814 +        int i10711;
89.10815 +        int i10712;
89.10816 +        int i10713;
89.10817 +        int i10714;
89.10818 +        int i10715;
89.10819 +        int i10716;
89.10820 +        int i10717;
89.10821 +        int i10718;
89.10822 +        int i10719;
89.10823 +        int i10720;
89.10824 +        int i10721;
89.10825 +        int i10722;
89.10826 +        int i10723;
89.10827 +        int i10724;
89.10828 +        int i10725;
89.10829 +        int i10726;
89.10830 +        int i10727;
89.10831 +        int i10728;
89.10832 +        int i10729;
89.10833 +        int i10730;
89.10834 +        int i10731;
89.10835 +        int i10732;
89.10836 +        int i10733;
89.10837 +        int i10734;
89.10838 +        int i10735;
89.10839 +        int i10736;
89.10840 +        int i10737;
89.10841 +        int i10738;
89.10842 +        int i10739;
89.10843 +        int i10740;
89.10844 +        int i10741;
89.10845 +        int i10742;
89.10846 +        int i10743;
89.10847 +        int i10744;
89.10848 +        int i10745;
89.10849 +        int i10746;
89.10850 +        int i10747;
89.10851 +        int i10748;
89.10852 +        int i10749;
89.10853 +        int i10750;
89.10854 +        int i10751;
89.10855 +        int i10752;
89.10856 +        int i10753;
89.10857 +        int i10754;
89.10858 +        int i10755;
89.10859 +        int i10756;
89.10860 +        int i10757;
89.10861 +        int i10758;
89.10862 +        int i10759;
89.10863 +        int i10760;
89.10864 +        int i10761;
89.10865 +        int i10762;
89.10866 +        int i10763;
89.10867 +        int i10764;
89.10868 +        int i10765;
89.10869 +        int i10766;
89.10870 +        int i10767;
89.10871 +        int i10768;
89.10872 +        int i10769;
89.10873 +        int i10770;
89.10874 +        int i10771;
89.10875 +        int i10772;
89.10876 +        int i10773;
89.10877 +        int i10774;
89.10878 +        int i10775;
89.10879 +        int i10776;
89.10880 +        int i10777;
89.10881 +        int i10778;
89.10882 +        int i10779;
89.10883 +        int i10780;
89.10884 +        int i10781;
89.10885 +        int i10782;
89.10886 +        int i10783;
89.10887 +        int i10784;
89.10888 +        int i10785;
89.10889 +        int i10786;
89.10890 +        int i10787;
89.10891 +        int i10788;
89.10892 +        int i10789;
89.10893 +        int i10790;
89.10894 +        int i10791;
89.10895 +        int i10792;
89.10896 +        int i10793;
89.10897 +        int i10794;
89.10898 +        int i10795;
89.10899 +        int i10796;
89.10900 +        int i10797;
89.10901 +        int i10798;
89.10902 +        int i10799;
89.10903 +
89.10904 +        if (unlikely) {
89.10905 +            // Since Foo is not loaded this will turn into an uncommon trap
89.10906 +            Class c = Foo.class;
89.10907 +
89.10908 +            StringBuilder sb = new StringBuilder();
89.10909 +        }
89.10910 +    }
89.10911 +}
    90.1 --- a/test/gc/arguments/TestMaxHeapSizeTools.java	Wed Nov 20 11:08:09 2013 -0800
    90.2 +++ b/test/gc/arguments/TestMaxHeapSizeTools.java	Thu Nov 21 12:30:35 2013 -0800
    90.3 @@ -64,32 +64,29 @@
    90.4      long newPlusOldSize = values[0] + values[1];
    90.5      long smallValue = newPlusOldSize / 2;
    90.6      long largeValue = newPlusOldSize * 2;
    90.7 +    long maxHeapSize = largeValue + (2 * 1024 * 1024);
    90.8  
    90.9      // -Xms is not set
   90.10 -    checkErgonomics(new String[] { gcflag, "-Xmx16M" }, values, -1, -1);
   90.11 -    checkErgonomics(new String[] { gcflag, "-Xmx16M", "-XX:InitialHeapSize=" + smallValue }, values, smallValue, smallValue);
   90.12 -    checkErgonomics(new String[] { gcflag, "-Xmx16M", "-XX:InitialHeapSize=" + largeValue }, values, -1, largeValue);
   90.13 -    checkErgonomics(new String[] { gcflag, "-Xmx16M", "-XX:InitialHeapSize=0" }, values, -1, -1);
   90.14 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize }, values, -1, -1);
   90.15 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-XX:InitialHeapSize=" + smallValue }, values, -1, smallValue);
   90.16 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-XX:InitialHeapSize=" + largeValue }, values, -1, largeValue);
   90.17 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-XX:InitialHeapSize=0" }, values, -1, -1);
   90.18  
   90.19      // -Xms is set to zero
   90.20 -    checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms0" }, values, -1, -1);
   90.21 -    checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms0", "-XX:InitialHeapSize=" + smallValue }, values, smallValue, smallValue);
   90.22 -    checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms0", "-XX:InitialHeapSize=" + largeValue }, values, -1, largeValue);
   90.23 -    checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms0", "-XX:InitialHeapSize=0" }, values, -1, -1);
   90.24 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms0" }, values, -1, -1);
   90.25 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms0", "-XX:InitialHeapSize=" + smallValue }, values, -1, smallValue);
   90.26 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms0", "-XX:InitialHeapSize=" + largeValue }, values, -1, largeValue);
   90.27 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms0", "-XX:InitialHeapSize=0" }, values, -1, -1);
   90.28  
   90.29      // -Xms is set to small value
   90.30 -    checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + smallValue }, values, -1, -1);
   90.31 -    checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + smallValue, "-XX:InitialHeapSize=" + smallValue }, values, smallValue, smallValue);
   90.32 -    checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + smallValue, "-XX:InitialHeapSize=" + largeValue }, values, smallValue, largeValue);
   90.33 -    checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + smallValue, "-XX:InitialHeapSize=0" }, values, smallValue, -1);
   90.34 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms" + smallValue }, values, -1, -1);
   90.35 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms" + smallValue, "-XX:InitialHeapSize=" + smallValue }, values, smallValue, smallValue);
   90.36 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms" + smallValue, "-XX:InitialHeapSize=" + largeValue }, values, smallValue, largeValue);
   90.37 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms" + smallValue, "-XX:InitialHeapSize=0" }, values, smallValue, -1);
   90.38  
   90.39      // -Xms is set to large value
   90.40 -    checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + largeValue }, values, largeValue, largeValue);
   90.41 -    // the next case has already been checked elsewhere and gives an error
   90.42 -    // checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + largeValue, "-XX:InitialHeapSize=" + smallValue }, values, smallValue, smallValue);
   90.43 -    // the next case has already been checked elsewhere too
   90.44 -    // checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + largeValue, "-XX:InitialHeapSize=" + largeValue }, values, values[0], largeValue);
   90.45 -    checkErgonomics(new String[] { gcflag, "-Xmx16M", "-Xms" + largeValue, "-XX:InitialHeapSize=0" }, values, largeValue, -1);
   90.46 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms" + largeValue }, values, largeValue, largeValue);
   90.47 +    checkErgonomics(new String[] { gcflag, "-Xmx" + maxHeapSize, "-Xms" + largeValue, "-XX:InitialHeapSize=0" }, values, largeValue, -1);
   90.48    }
   90.49  
   90.50    private static long align_up(long value, long alignment) {
    91.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    91.2 +++ b/test/gc/arguments/TestMaxNewSize.java	Thu Nov 21 12:30:35 2013 -0800
    91.3 @@ -0,0 +1,122 @@
    91.4 +/*
    91.5 +* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    91.6 +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    91.7 +*
    91.8 +* This code is free software; you can redistribute it and/or modify it
    91.9 +* under the terms of the GNU General Public License version 2 only, as
   91.10 +* published by the Free Software Foundation.
   91.11 +*
   91.12 +* This code is distributed in the hope that it will be useful, but WITHOUT
   91.13 +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   91.14 +* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   91.15 +* version 2 for more details (a copy is included in the LICENSE file that
   91.16 +* accompanied this code).
   91.17 +*
   91.18 +* You should have received a copy of the GNU General Public License version
   91.19 +* 2 along with this work; if not, write to the Free Software Foundation,
   91.20 +* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   91.21 +*
   91.22 +* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   91.23 +* or visit www.oracle.com if you need additional information or have any
   91.24 +* questions.
   91.25 +*/
   91.26 +
   91.27 +/*
   91.28 + * @test TestMaxNewSize
   91.29 + * @key gc
   91.30 + * @bug 7057939
   91.31 + * @summary Make sure that MaxNewSize always has a useful value after argument
   91.32 + * processing.
   91.33 + * @library /testlibrary
   91.34 + * @build TestMaxNewSize
   91.35 + * @run main TestMaxNewSize -XX:+UseSerialGC
   91.36 + * @run main TestMaxNewSize -XX:+UseParallelGC
   91.37 + * @run main TestMaxNewSize -XX:+UseConcMarkSweepGC
   91.38 + * @run main TestMaxNewSize -XX:+UseG1GC
   91.39 + * @author thomas.schatzl@oracle.com, jesper.wilhelmsson@oracle.com
   91.40 + */
   91.41 +
   91.42 +import java.util.regex.Matcher;
   91.43 +import java.util.regex.Pattern;
   91.44 +
   91.45 +import java.math.BigInteger;
   91.46 +
   91.47 +import java.util.ArrayList;
   91.48 +import java.util.Arrays;
   91.49 +
   91.50 +import com.oracle.java.testlibrary.*;
   91.51 +
   91.52 +public class TestMaxNewSize {
   91.53 +
   91.54 +  private static void checkMaxNewSize(String[] flags, int heapsize) throws Exception {
   91.55 +    BigInteger actual = new BigInteger(getMaxNewSize(flags));
   91.56 +    System.out.println(actual);
   91.57 +    if (actual.compareTo(new BigInteger((new Long(heapsize)).toString())) == 1) {
   91.58 +      throw new RuntimeException("MaxNewSize value set to \"" + actual +
   91.59 +        "\", expected otherwise when running with the following flags: " + Arrays.asList(flags).toString());
   91.60 +    }
   91.61 +  }
   91.62 +
   91.63 +  private static void checkIncompatibleNewSize(String[] flags) throws Exception {
   91.64 +    ArrayList<String> finalargs = new ArrayList<String>();
   91.65 +    finalargs.addAll(Arrays.asList(flags));
   91.66 +    finalargs.add("-version");
   91.67 +
   91.68 +    ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(finalargs.toArray(new String[0]));
   91.69 +    OutputAnalyzer output = new OutputAnalyzer(pb.start());
   91.70 +    output.shouldContain("Initial young gen size set larger than the maximum young gen size");
   91.71 +  }
   91.72 +
   91.73 +  private static boolean isRunningG1(String[] args) {
   91.74 +    for (int i = 0; i < args.length; i++) {
   91.75 +      if (args[i].contains("+UseG1GC")) {
   91.76 +        return true;
   91.77 +      }
   91.78 +    }
   91.79 +    return false;
   91.80 +  }
   91.81 +
   91.82 +  private static String getMaxNewSize(String[] flags) throws Exception {
   91.83 +    ArrayList<String> finalargs = new ArrayList<String>();
   91.84 +    finalargs.addAll(Arrays.asList(flags));
   91.85 +    if (isRunningG1(flags)) {
   91.86 +      finalargs.add("-XX:G1HeapRegionSize=1M");
   91.87 +    }
   91.88 +    finalargs.add("-XX:+PrintFlagsFinal");
   91.89 +    finalargs.add("-version");
   91.90 +
   91.91 +    ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(finalargs.toArray(new String[0]));
   91.92 +    OutputAnalyzer output = new OutputAnalyzer(pb.start());
   91.93 +    output.shouldHaveExitValue(0);
   91.94 +    String stdout = output.getStdout();
   91.95 +    //System.out.println(stdout);
   91.96 +    return getFlagValue("MaxNewSize", stdout);
   91.97 +  }
   91.98 +
   91.99 +  private static String getFlagValue(String flag, String where) {
  91.100 +    Matcher m = Pattern.compile(flag + "\\s+:?=\\s+\\d+").matcher(where);
  91.101 +    if (!m.find()) {
  91.102 +      throw new RuntimeException("Could not find value for flag " + flag + " in output string");
  91.103 +    }
  91.104 +    String match = m.group();
  91.105 +    return match.substring(match.lastIndexOf(" ") + 1, match.length());
  91.106 +  }
  91.107 +
  91.108 +  public static void main(String args[]) throws Exception {
  91.109 +    String gcName = args[0];
  91.110 +    final int M32 = 32 * 1024 * 1024;
  91.111 +    final int M64 = 64 * 1024 * 1024;
  91.112 +    final int M96 = 96 * 1024 * 1024;
  91.113 +    final int M128 = 128 * 1024 * 1024;
  91.114 +    checkMaxNewSize(new String[] { gcName, "-Xmx128M" }, M128);
  91.115 +    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewRatio=5" }, M128);
  91.116 +    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewSize=32M" }, M128);
  91.117 +    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:OldSize=96M" }, M128);
  91.118 +    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:MaxNewSize=32M" }, M32);
  91.119 +    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewSize=32M", "-XX:MaxNewSize=32M" }, M32);
  91.120 +    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewRatio=6", "-XX:MaxNewSize=32M" }, M32);
  91.121 +    checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-Xms96M" }, M128);
  91.122 +    checkMaxNewSize(new String[] { gcName, "-Xmx96M", "-Xms96M" }, M96);
  91.123 +    checkMaxNewSize(new String[] { gcName, "-XX:NewSize=128M", "-XX:MaxNewSize=50M"}, M128);
  91.124 +  }
  91.125 +}
    92.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    92.2 +++ b/test/gc/g1/TestHumongousCodeCacheRoots.java	Thu Nov 21 12:30:35 2013 -0800
    92.3 @@ -0,0 +1,143 @@
    92.4 +/*
    92.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    92.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    92.7 + *
    92.8 + * This code is free software; you can redistribute it and/or modify it
    92.9 + * under the terms of the GNU General Public License version 2 only, as
   92.10 + * published by the Free Software Foundation.
   92.11 + *
   92.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   92.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   92.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   92.15 + * version 2 for more details (a copy is included in the LICENSE file that
   92.16 + * accompanied this code).
   92.17 + *
   92.18 + * You should have received a copy of the GNU General Public License version
   92.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   92.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   92.21 + *
   92.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   92.23 + * or visit www.oracle.com if you need additional information or have any
   92.24 + * questions.
   92.25 + */
   92.26 +
   92.27 +/*
   92.28 + * @test
   92.29 + * @key regression
   92.30 + * @key gc
   92.31 + * @bug 8027756
   92.32 + * @library /testlibrary /testlibrary/whitebox
   92.33 + * @build TestHumongousCodeCacheRoots
   92.34 + * @run main ClassFileInstaller sun.hotspot.WhiteBox
   92.35 + * @summary Humongous objects may have references from the code cache
   92.36 + * @run main TestHumongousCodeCacheRoots
   92.37 +*/
   92.38 +
   92.39 +import com.oracle.java.testlibrary.*;
   92.40 +import sun.hotspot.WhiteBox;
   92.41 +
   92.42 +import java.util.ArrayList;
   92.43 +import java.util.Arrays;
   92.44 +
   92.45 +class TestHumongousCodeCacheRootsHelper {
   92.46 +
   92.47 +    static final int n = 1000000;
   92.48 +    static final int[] AA = new int[n];
   92.49 +    static final int[] BB = new int[n];
   92.50 +
   92.51 +    public static void main(String args[]) throws Exception {
   92.52 +        // do some work so that the compiler compiles this method, inlining the
   92.53 +        // reference to the integer array (which is a humonguous object) into
   92.54 +        // the code cache.
   92.55 +        for(int i = 0; i < n; i++) {
   92.56 +            AA[i] = 0;
   92.57 +            BB[i] = 0;
   92.58 +        }
   92.59 +        // trigger a GC that checks that the verification code allows humongous
   92.60 +        // objects with code cache roots; objects should be all live here.
   92.61 +        System.gc();
   92.62 +
   92.63 +        // deoptimize everyhing: this should make all compiled code zombies.
   92.64 +        WhiteBox wb = WhiteBox.getWhiteBox();
   92.65 +        wb.deoptimizeAll();
   92.66 +
   92.67 +        // trigger a GC that checks that the verification code allows humongous
   92.68 +        // objects with code cache roots; objects should be all live here.
   92.69 +        System.gc();
   92.70 +
   92.71 +        // wait a little for the code cache sweeper to try to clean up zombie nmethods
   92.72 +        // and unregister the code roots.
   92.73 +        try { Thread.sleep(5000); } catch (InterruptedException ex) { }
   92.74 +
   92.75 +        // do some work on the arrays to make sure that they need to be live after the GCs
   92.76 +        for(int i = 0; i < n; i++) {
   92.77 +            AA[i] = 1;
   92.78 +            BB[i] = 10;
   92.79 +        }
   92.80 +
   92.81 +        System.out.println();
   92.82 +    }
   92.83 +}
   92.84 +
   92.85 +public class TestHumongousCodeCacheRoots {
   92.86 +
   92.87 +  /**
   92.88 +   * Executes a class in a new VM process with the given parameters.
   92.89 +   * @param vmargs Arguments to the VM to run
   92.90 +   * @param classname Name of the class to run
   92.91 +   * @param arguments Arguments to the class
   92.92 +   * @param useTestDotJavaDotOpts Use test.java.opts as part of the VM argument string
   92.93 +   * @return The OutputAnalyzer with the results for the invocation.
   92.94 +   */
   92.95 +  public static OutputAnalyzer runWhiteBoxTest(String[] vmargs, String classname, String[] arguments, boolean useTestDotJavaDotOpts) throws Exception {
   92.96 +    ArrayList<String> finalargs = new ArrayList<String>();
   92.97 +
   92.98 +    String[] whiteboxOpts = new String[] {
   92.99 +      "-Xbootclasspath/a:.",
  92.100 +      "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI",
  92.101 +      "-cp", System.getProperty("java.class.path"),
  92.102 +    };
  92.103 +
  92.104 +    if (useTestDotJavaDotOpts) {
  92.105 +      // System.getProperty("test.java.opts") is '' if no options is set,
  92.106 +      // we need to skip such a result
  92.107 +      String[] externalVMOpts = new String[0];
  92.108 +      if (System.getProperty("test.java.opts") != null && System.getProperty("test.java.opts").length() != 0) {
  92.109 +        externalVMOpts = System.getProperty("test.java.opts").split(" ");
  92.110 +      }
  92.111 +      finalargs.addAll(Arrays.asList(externalVMOpts));
  92.112 +    }
  92.113 +
  92.114 +    finalargs.addAll(Arrays.asList(vmargs));
  92.115 +    finalargs.addAll(Arrays.asList(whiteboxOpts));
  92.116 +    finalargs.add(classname);
  92.117 +    finalargs.addAll(Arrays.asList(arguments));
  92.118 +
  92.119 +    ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(finalargs.toArray(new String[0]));
  92.120 +    OutputAnalyzer output = new OutputAnalyzer(pb.start());
  92.121 +    output.shouldHaveExitValue(0);
  92.122 +
  92.123 +    return output;
  92.124 +  }
  92.125 +
  92.126 +  public static void runTest(String compiler, String[] other) throws Exception {
  92.127 +    ArrayList<String> joined = new ArrayList<String>();
  92.128 +    joined.add(compiler);
  92.129 +    joined.addAll(Arrays.asList(other));
  92.130 +    runWhiteBoxTest(joined.toArray(new String[0]), TestHumongousCodeCacheRootsHelper.class.getName(),
  92.131 +      new String[] {}, false);
  92.132 +  }
  92.133 +
  92.134 +  public static void main(String[] args) throws Exception {
  92.135 +    final String[] baseArguments = new String[] {
  92.136 +      "-XX:+UseG1GC", "-XX:G1HeapRegionSize=1M", "-Xmx100M", // make sure we get a humongous region
  92.137 +      "-XX:+UnlockDiagnosticVMOptions",
  92.138 +      "-XX:InitiatingHeapOccupancyPercent=1", // strong code root marking
  92.139 +      "-XX:+G1VerifyHeapRegionCodeRoots", "-XX:+VerifyAfterGC", // make sure that verification is run
  92.140 +      "-XX:NmethodSweepFraction=1", "-XX:NmethodSweepCheckInterval=1",  // make the code cache sweep more predictable
  92.141 +    };
  92.142 +    runTest("-client", baseArguments);
  92.143 +    runTest("-server", baseArguments);
  92.144 +  }
  92.145 +}
  92.146 +
    93.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    93.2 +++ b/test/runtime/memory/ReadFromNoaccessArea.java	Thu Nov 21 12:30:35 2013 -0800
    93.3 @@ -0,0 +1,80 @@
    93.4 +/*
    93.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    93.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    93.7 + *
    93.8 + * This code is free software; you can redistribute it and/or modify it
    93.9 + * under the terms of the GNU General Public License version 2 only, as
   93.10 + * published by the Free Software Foundation.
   93.11 + *
   93.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   93.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   93.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   93.15 + * version 2 for more details (a copy is included in the LICENSE file that
   93.16 + * accompanied this code).
   93.17 + *
   93.18 + * You should have received a copy of the GNU General Public License version
   93.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   93.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   93.21 + *
   93.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   93.23 + * or visit www.oracle.com if you need additional information or have any
   93.24 + * questions.
   93.25 + */
   93.26 +
   93.27 +/*
   93.28 + * @test
   93.29 + * @summary Test that touching noaccess area in class ReservedHeapSpace results in SIGSEGV/ACCESS_VIOLATION
   93.30 + * @library /testlibrary /testlibrary/whitebox
   93.31 + * @build ReadFromNoaccessArea
   93.32 + * @run main ClassFileInstaller sun.hotspot.WhiteBox
   93.33 + * @run main ReadFromNoaccessArea
   93.34 + */
   93.35 +
   93.36 +import com.oracle.java.testlibrary.*;
   93.37 +import sun.hotspot.WhiteBox;
   93.38 +
   93.39 +public class ReadFromNoaccessArea {
   93.40 +
   93.41 +  public static void main(String args[]) throws Exception {
   93.42 +    if (!Platform.is64bit()) {
   93.43 +      System.out.println("ReadFromNoaccessArea tests is useful only on 64bit architecture. Passing silently.");
   93.44 +      return;
   93.45 +    }
   93.46 +
   93.47 +    ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
   93.48 +          "-Xbootclasspath/a:.",
   93.49 +          "-XX:+UnlockDiagnosticVMOptions",
   93.50 +          "-XX:+WhiteBoxAPI",
   93.51 +          "-XX:+UseCompressedOops",
   93.52 +          "-XX:HeapBaseMinAddress=33G",
   93.53 +          DummyClassWithMainTryingToReadFromNoaccessArea.class.getName());
   93.54 +
   93.55 +    OutputAnalyzer output = new OutputAnalyzer(pb.start());
   93.56 +    System.out.println("******* Printing stdout for analysis in case of failure *******");
   93.57 +    System.out.println(output.getStdout());
   93.58 +    System.out.println("******* Printing stderr for analysis in case of failure *******");
   93.59 +    System.out.println(output.getStderr());
   93.60 +    System.out.println("***************************************************************");
   93.61 +    if (output.getStdout() != null && output.getStdout().contains("WB_ReadFromNoaccessArea method is useless")) {
   93.62 +      // Test conditions broken. There is no protected page in ReservedHeapSpace in these circumstances. Silently passing test.
   93.63 +      return;
   93.64 +    }
   93.65 +    if (Platform.isWindows()) {
   93.66 +      output.shouldContain("EXCEPTION_ACCESS_VIOLATION");
   93.67 +    } else if (Platform.isOSX()) {
   93.68 +      output.shouldContain("SIGBUS");
   93.69 +    } else {
   93.70 +      output.shouldContain("SIGSEGV");
   93.71 +    }
   93.72 +  }
   93.73 +
   93.74 +  public static class DummyClassWithMainTryingToReadFromNoaccessArea {
   93.75 +
   93.76 +    // This method calls whitebox method reading from noaccess area
   93.77 +    public static void main(String args[]) throws Exception {
   93.78 +      WhiteBox.getWhiteBox().readFromNoaccessArea();
   93.79 +      throw new Exception("Call of readFromNoaccessArea succeeded! This is wrong. Crash expected. Test failed.");
   93.80 +    }
   93.81 +  }
   93.82 +
   93.83 +}
    94.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    94.2 +++ b/test/runtime/memory/RunUnitTestsConcurrently.java	Thu Nov 21 12:30:35 2013 -0800
    94.3 @@ -0,0 +1,74 @@
    94.4 +/*
    94.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    94.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    94.7 + *
    94.8 + * This code is free software; you can redistribute it and/or modify it
    94.9 + * under the terms of the GNU General Public License version 2 only, as
   94.10 + * published by the Free Software Foundation.
   94.11 + *
   94.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   94.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   94.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   94.15 + * version 2 for more details (a copy is included in the LICENSE file that
   94.16 + * accompanied this code).
   94.17 + *
   94.18 + * You should have received a copy of the GNU General Public License version
   94.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   94.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   94.21 + *
   94.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   94.23 + * or visit www.oracle.com if you need additional information or have any
   94.24 + * questions.
   94.25 + */
   94.26 +
   94.27 +/*
   94.28 + * @test
   94.29 + * @summary Test launches unit tests inside vm concurrently
   94.30 + * @library /testlibrary /testlibrary/whitebox
   94.31 + * @build RunUnitTestsConcurrently
   94.32 + * @run main ClassFileInstaller sun.hotspot.WhiteBox
   94.33 + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI RunUnitTestsConcurrently 30 15000
   94.34 + */
   94.35 +
   94.36 +import com.oracle.java.testlibrary.*;
   94.37 +import sun.hotspot.WhiteBox;
   94.38 +
   94.39 +public class RunUnitTestsConcurrently {
   94.40 +
   94.41 +  private static WhiteBox wb;
   94.42 +  private static long timeout;
   94.43 +  private static long timeStamp;
   94.44 +
   94.45 +  public static class Worker implements Runnable {
   94.46 +    @Override
   94.47 +    public void run() {
   94.48 +      while (System.currentTimeMillis() - timeStamp < timeout) {
   94.49 +        WhiteBox.getWhiteBox().runMemoryUnitTests();
   94.50 +      }
   94.51 +    }
   94.52 +  }
   94.53 +
   94.54 +  public static void main(String[] args) throws InterruptedException {
   94.55 +    if (!Platform.isDebugBuild() || !Platform.is64bit()) {
   94.56 +      return;
   94.57 +    }
   94.58 +    wb = WhiteBox.getWhiteBox();
   94.59 +    System.out.println("Starting threads");
   94.60 +
   94.61 +    int threads = Integer.valueOf(args[0]);
   94.62 +    timeout = Long.valueOf(args[1]);
   94.63 +
   94.64 +    timeStamp = System.currentTimeMillis();
   94.65 +
   94.66 +    Thread[] threadsArray = new Thread[threads];
   94.67 +    for (int i = 0; i < threads; i++) {
   94.68 +      threadsArray[i] = new Thread(new Worker());
   94.69 +      threadsArray[i].start();
   94.70 +    }
   94.71 +    for (int i = 0; i < threads; i++) {
   94.72 +      threadsArray[i].join();
   94.73 +    }
   94.74 +
   94.75 +    System.out.println("Quitting test.");
   94.76 +  }
   94.77 +}
    95.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    95.2 +++ b/test/runtime/memory/StressVirtualSpaceResize.java	Thu Nov 21 12:30:35 2013 -0800
    95.3 @@ -0,0 +1,41 @@
    95.4 +/*
    95.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
    95.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    95.7 + *
    95.8 + * This code is free software; you can redistribute it and/or modify it
    95.9 + * under the terms of the GNU General Public License version 2 only, as
   95.10 + * published by the Free Software Foundation.
   95.11 + *
   95.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   95.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   95.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   95.15 + * version 2 for more details (a copy is included in the LICENSE file that
   95.16 + * accompanied this code).
   95.17 + *
   95.18 + * You should have received a copy of the GNU General Public License version
   95.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   95.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   95.21 + *
   95.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   95.23 + * or visit www.oracle.com if you need additional information or have any
   95.24 + * questions.
   95.25 + */
   95.26 +
   95.27 +/*
   95.28 + * @test
   95.29 + * @summary Stress test that expands/shrinks VirtualSpace
   95.30 + * @library /testlibrary /testlibrary/whitebox
   95.31 + * @build StressVirtualSpaceResize
   95.32 + * @run main ClassFileInstaller sun.hotspot.WhiteBox
   95.33 + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI StressVirtualSpaceResize
   95.34 + */
   95.35 +
   95.36 +import sun.hotspot.WhiteBox;
   95.37 +
   95.38 +public class StressVirtualSpaceResize {
   95.39 +
   95.40 +  public static void main(String args[]) throws Exception {
   95.41 +    if (WhiteBox.getWhiteBox().stressVirtualSpaceResize(1000, 0xffffL, 0xffffL) != 0)
   95.42 +      throw new RuntimeException("Whitebox method stressVirtualSpaceResize returned non zero exit code");
   95.43 +  }
   95.44 +}
    96.1 --- a/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java	Wed Nov 20 11:08:09 2013 -0800
    96.2 +++ b/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java	Thu Nov 21 12:30:35 2013 -0800
    96.3 @@ -144,4 +144,10 @@
    96.4  
    96.5    // force Full GC
    96.6    public native void fullGC();
    96.7 +
    96.8 +  // Tests on ReservedSpace/VirtualSpace classes
    96.9 +  public native int stressVirtualSpaceResize(long reservedSpaceSize, long magnitude, long iterations);
   96.10 +  public native void runMemoryUnitTests();
   96.11 +  public native void readFromNoaccessArea();
   96.12 +
   96.13  }

mercurial