60806040523480156200001157600080fd5b50604051620026c7380380620026c7833981810160405281019062000037919062000452565b620000576200004b6200016d60201b60201c565b6200017560201b60201c565b6040518060400160405280600a81526020017f537061636543617463680000000000000000000000000000000000000000000081525060049080519060200190620000a49291906200038b565b506040518060400160405280600581526020017f434154434800000000000000000000000000000000000000000000000000000081525060059080519060200190620000f29291906200038b565b5062000125816012600a620001089190620005d9565b6305f5e10062000119919062000716565b6200023960201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200087d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a390620004d1565b60405180910390fd5b8060036000828254620002c0919062000521565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000318919062000521565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200037f9190620004f3565b60405180910390a35050565b8280546200039990620007c2565b90600052602060002090601f016020900481019282620003bd576000855562000409565b82601f10620003d857805160ff191683800117855562000409565b8280016001018555821562000409579182015b8281111562000408578251825591602001919060010190620003eb565b5b5090506200041891906200041c565b5090565b5b80821115620004375760008160009055506001016200041d565b5090565b6000815190506200044c8162000863565b92915050565b6000602082840312156200046557600080fd5b600062000475848285016200043b565b91505092915050565b60006200048d601f8362000510565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b620004cb81620007ab565b82525050565b60006020820190508181036000830152620004ec816200047e565b9050919050565b60006020820190506200050a6000830184620004c0565b92915050565b600082825260208201905092915050565b60006200052e82620007ab565b91506200053b83620007ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620005735762000572620007f8565b5b828201905092915050565b6000808291508390505b6001851115620005d057808604811115620005a857620005a7620007f8565b5b6001851615620005b85780820291505b8081029050620005c88562000856565b945062000588565b94509492505050565b6000620005e682620007ab565b9150620005f383620007b5565b9250620006227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200062a565b905092915050565b6000826200063c57600190506200070f565b816200064c57600090506200070f565b81600181146200066557600281146200067057620006a6565b60019150506200070f565b60ff841115620006855762000684620007f8565b5b8360020a9150848211156200069f576200069e620007f8565b5b506200070f565b5060208310610133831016604e8410600b8410161715620006e05782820a905083811115620006da57620006d9620007f8565b5b6200070f565b620006ef84848460016200057e565b92509050818404811115620007095762000708620007f8565b5b81810290505b9392505050565b60006200072382620007ab565b91506200073083620007ab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200076c576200076b620007f8565b5b828202905092915050565b600062000784826200078b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006002820490506001821680620007db57607f821691505b60208210811415620007f257620007f162000827565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b6200086e8162000777565b81146200087a57600080fd5b50565b611e3a806200088d6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d7146102aa578063a9059cbb146102da578063dd62ed3e1461030a578063fb86a4041461033a578063fc7bd038146103585761010b565b806370a0823114610234578063880ad0af146102645780638da5cb5b1461026e57806395d89b411461028c5761010b565b8063313ce567116100de578063313ce567146101ac57806339509351146101ca5780634a8d1348146101fa578063671f3db8146102185761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610374565b60405161012591906117ed565b60405180910390f35b6101486004803603810190610143919061133f565b610406565b60405161015591906117d2565b60405180910390f35b610166610424565b604051610173919061192f565b60405180910390f35b610196600480360381019061019191906112f0565b61042e565b6040516101a391906117d2565b60405180910390f35b6101b4610526565b6040516101c19190611973565b60405180910390f35b6101e460048036038101906101df919061133f565b61052f565b6040516101f191906117d2565b60405180910390f35b6102026105db565b60405161020f91906117b7565b60405180910390f35b610232600480360381019061022d91906113cf565b610605565b005b61024e6004803603810190610249919061128b565b610798565b60405161025b919061192f565b60405180910390f35b61026c6107e1565b005b61027661091d565b60405161028391906117b7565b60405180910390f35b610294610946565b6040516102a191906117ed565b60405180910390f35b6102c460048036038101906102bf919061133f565b6109d8565b6040516102d191906117d2565b60405180910390f35b6102f460048036038101906102ef919061133f565b610ac3565b60405161030191906117d2565b60405180910390f35b610324600480360381019061031f91906112b4565b610ae1565b604051610331919061192f565b60405180910390f35b610342610b68565b60405161034f919061192f565b60405180910390f35b610372600480360381019061036d919061137b565b610b88565b005b60606004805461038390611cb0565b80601f01602080910402602001604051908101604052809291908181526020018280546103af90611cb0565b80156103fc5780601f106103d1576101008083540402835291602001916103fc565b820191906000526020600020905b8154815290600101906020018083116103df57829003601f168201915b5050505050905090565b600061041a610413610d47565b8484610d4f565b6001905092915050565b6000600354905090565b600061043b848484610f1a565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610486610d47565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fd9061188f565b60405180910390fd5b61051a85610512610d47565b858403610d4f565b60019150509392505050565b60006012905090565b60006105d161053c610d47565b84846002600061054a610d47565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546105cc9190611a07565b610d4f565b6001905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61060d610d47565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156107945760006012600a6106729190611ab0565b629896806106809190611bce565b90506000612710826106929190611bce565b90506000600180600180856106a79190611bce565b6106b19190611bce565b6106bb9190611bce565b6106c59190611bce565b905083816106d39190611bce565b905080600160006106e2610d47565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461072b9190611a07565b925050819055503373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461078c57600080fd5b505050610795565b5b50565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107e9610d47565b73ffffffffffffffffffffffffffffffffffffffff1661080761091d565b73ffffffffffffffffffffffffffffffffffffffff161461085d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610854906118af565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461095590611cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461098190611cb0565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b5050505050905090565b600080600260006109e7610d47565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9b9061190f565b60405180910390fd5b610ab8610aaf610d47565b85858403610d4f565b600191505092915050565b6000610ad7610ad0610d47565b8484610f1a565b6001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6012600a610b769190611ab0565b6305f5e100610b859190611bce565b81565b610b90610d47565b73ffffffffffffffffffffffffffffffffffffffff16610bae61091d565b73ffffffffffffffffffffffffffffffffffffffff1614610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb906118af565b60405180910390fd5b60005b8251811015610d42576000838281518110610c4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167fd551363168ce4784e28e5d59fc07cbea2191657416e05f6e8cd8f1086eb91e6d8286604051610d2592919061194a565b60405180910390a250508080610d3a90611ce2565b915050610c07565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db6906118ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e269061182f565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f0d919061192f565b60405180910390a3505050565b60008111610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f549061186f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc4906118cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561103d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110349061180f565b60405180910390fd5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb9061184f565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111599190611a07565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111bd919061192f565b60405180910390a350505050565b60006111de6111d9846119bf565b61198e565b905080838252602082019050828560208602820111156111fd57600080fd5b60005b8581101561122d57816112138882611237565b845260208401935060208301925050600181019050611200565b5050509392505050565b60008135905061124681611dd6565b92915050565b600082601f83011261125d57600080fd5b813561126d8482602086016111cb565b91505092915050565b60008135905061128581611ded565b92915050565b60006020828403121561129d57600080fd5b60006112ab84828501611237565b91505092915050565b600080604083850312156112c757600080fd5b60006112d585828601611237565b92505060206112e685828601611237565b9150509250929050565b60008060006060848603121561130557600080fd5b600061131386828701611237565b935050602061132486828701611237565b925050604061133586828701611276565b9150509250925092565b6000806040838503121561135257600080fd5b600061136085828601611237565b925050602061137185828601611276565b9150509250929050565b6000806040838503121561138e57600080fd5b600083013567ffffffffffffffff8111156113a857600080fd5b6113b48582860161124c565b92505060206113c585828601611276565b9150509250929050565b6000602082840312156113e157600080fd5b60006113ef84828501611276565b91505092915050565b61140181611c28565b82525050565b61141081611c3a565b82525050565b6000611421826119eb565b61142b81856119f6565b935061143b818560208601611c7d565b61144481611db8565b840191505092915050565b600061145c6023836119f6565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006114c26022836119f6565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006115286026836119f6565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061158e601b836119f6565b91507f45524332303a207472616e7366657220616d6f756e74207a65726f00000000006000830152602082019050919050565b60006115ce6028836119f6565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006116346020836119f6565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006116746025836119f6565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006116da6024836119f6565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006117406025836119f6565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6117a281611c66565b82525050565b6117b181611c70565b82525050565b60006020820190506117cc60008301846113f8565b92915050565b60006020820190506117e76000830184611407565b92915050565b600060208201905081810360008301526118078184611416565b905092915050565b600060208201905081810360008301526118288161144f565b9050919050565b60006020820190508181036000830152611848816114b5565b9050919050565b600060208201905081810360008301526118688161151b565b9050919050565b6000602082019050818103600083015261188881611581565b9050919050565b600060208201905081810360008301526118a8816115c1565b9050919050565b600060208201905081810360008301526118c881611627565b9050919050565b600060208201905081810360008301526118e881611667565b9050919050565b60006020820190508181036000830152611908816116cd565b9050919050565b6000602082019050818103600083015261192881611733565b9050919050565b60006020820190506119446000830184611799565b92915050565b600060408201905061195f6000830185611799565b61196c6020830184611799565b9392505050565b600060208201905061198860008301846117a8565b92915050565b6000604051905081810181811067ffffffffffffffff821117156119b5576119b4611d89565b5b8060405250919050565b600067ffffffffffffffff8211156119da576119d9611d89565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000611a1282611c66565b9150611a1d83611c66565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611a5257611a51611d2b565b5b828201905092915050565b6000808291508390505b6001851115611aa757808604811115611a8357611a82611d2b565b5b6001851615611a925780820291505b8081029050611aa085611dc9565b9450611a67565b94509492505050565b6000611abb82611c66565b9150611ac683611c70565b9250611af37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611afb565b905092915050565b600082611b0b5760019050611bc7565b81611b195760009050611bc7565b8160018114611b2f5760028114611b3957611b68565b6001915050611bc7565b60ff841115611b4b57611b4a611d2b565b5b8360020a915084821115611b6257611b61611d2b565b5b50611bc7565b5060208310610133831016604e8410600b8410161715611b9d5782820a905083811115611b9857611b97611d2b565b5b611bc7565b611baa8484846001611a5d565b92509050818404811115611bc157611bc0611d2b565b5b81810290505b9392505050565b6000611bd982611c66565b9150611be483611c66565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c1d57611c1c611d2b565b5b828202905092915050565b6000611c3382611c46565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611c9b578082015181840152602081019050611c80565b83811115611caa576000848401525b50505050565b60006002820490506001821680611cc857607f821691505b60208210811415611cdc57611cdb611d5a565b5b50919050565b6000611ced82611c66565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611d2057611d1f611d2b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b611ddf81611c28565b8114611dea57600080fd5b50565b611df681611c66565b8114611e0157600080fd5b5056fea2646970667358221220981640f09f0c5e93f5d84da378bb4c4bb43602ae019ef39f7e81df79939b7af864736f6c63430008000033000000000000000000000000a0eabb285a73da8b0b8a57f15124700e845fc0f3